孫鑫網路編程
1. 孫鑫老師的VC++教學視頻的第14課網路編程是不是得在Windows 2000操作系統下才能實現,我在XP下怎麼不行啊
一般情況下xp,vista都是可以的,千萬注意要加上樓上那個鏈接庫
2. 如何學習網路編程
1.利用WinInet函數庫寫了幾個簡單的網路應用程序:簡易登錄、查詢新書RSS等;了解了HTTP協議的一些內容。
2.看孫鑫的VC視頻教程, ,雖然照著視頻能夠寫出實例代碼來,但是僅僅是會用,其中很多原理都不理解,比如說WSA開頭的非同步函數,Winsock2對socket的一些增強或者改進等。
3.一邊上《計算機網路》的課,一邊讀《C++網路編程》。通過計算機網路課我知道了所謂的協議分析是怎麼一回事情,通過wireshark抓包分析,「協議」就如同這個詞本身意思是一樣的,是通信過程中的一種約定,規定了數據包中的每個或每幾個位元組代表了什麼意思;
4.去看《計算機網路高級編程技術》,我初略的翻了翻,看到裡面的基礎、提高、綜合訓練篇、突然反應過來:socket和操作系統提供的系統調用,基本上都是C語言介面的,協議欄位的具體表現,不就是用結構體嗎?協議中的幾個位元組代表什麼與C語言基本數據類型就能對應了起來(-_-!這是缺少實踐造成的遲鈍啊)。
5.了解下Boost.asio,java的MINA框架,這些都是非同步I/O前攝器模式的實現,當然還有ACE_Proactor
6.閱讀《深入理解MySQL核心技術》和Linux程序設計(第3版)》,從把整個知識體系都聯系起來,從socket到完整網路伺服器程序,網路編程才算正式進入了門道。
所以,正常的學習路徑應該是:C/C++語言 -->>計算機網路 -->>協議分析 -->>BSD Socket、OS API ( fork()、pthread_create()、select() ) -->>Reactor、Proactor模式
在這個過程我的體會是,最好是從Linux下或者Unix底下學習,比起Windows,Linux的編程介面設計更很簡潔,使用的基本上都是標準的數據類型,很多源代碼是開放的,而且我比較習慣於看小寫的英文單詞。。。我發現,如果最一開始能夠從整體上了解網路編程的全景,就會知道應該學習什麼,下一步該學什麼,循序漸進才是好的學習方法。
我所理解的「全景」:
--計算機網路種類有很多種:ATM、X.25、Internet(大大小小的區域網互聯而成,乙太網、令牌網等等)
---- Internet通信的協議也有很多種,其中最核心的是TCP/IP協議
---- 網路編程介面也有很多種,BSD UNIX提出了socket,是一種通信機制,是管道概念的擴展
-------- socket有三種屬性:域(或協議族)、類型、協議
-------- 最常用的協議族有AF_UNIX和AF_INET(對應現在的Internet),AF_INET的類型又有兩種:數據流(tcp)和數據報 (udp)
------------ 在<sys/types.h>和<sys/socket.h>定義了socket編程的系統調用:socket()、struct sockaddr、bind()、listen()、accept()、connect()、close()、sendto()、recvfrom()
------------ 其中bind()是用來給創建的socket命名的,如果是AF_UNIX會關聯到文件系統的一個路徑上,如果是AF_INET則會綁定到IP的埠號上;listen()用來保存未處理的客戶請求的隊列;accept()等待客戶端的連接,會創建新的socket用來處理客戶端連接。
------------ 由於歷史原因,不同的計算機使用不同的位元組序來表示整數,Intel和Motorola的處理器的位元組序就不一樣,所以要轉換為網路序(好像Unicode中的Little-Endian、Big-Endian也是這么個情況。。)
------------ 伺服器必然為多客戶服務的,為了提高運行效率,高效利用系統資源,就出現多進程、多線程的服務端程序,這就需要用到fork()和pthread_create()了,再往下就是select()、pull()等多路復用和非同步I/O機制了。
----------------為了簡化網路應用程序的開發,增加代碼的復用性、擴展性、可謂性;出現了Reacotr、Preactor等設計模式,出現了ACE、Boost.asio等框架、進一步簡化網路開發的難度,出現了WinInet、libcurl這樣的面向應用層的函數庫。
3. 孫鑫教學視頻 網路編程 為什麼客戶端不用綁定和指定埠號
伺服器要監聽,所以需要綁定埠。這樣客戶端才能根據IP地址和埠號訪問伺服器,客戶端的埠是隨機分配的。是從還沒有使用的埠中分配的。當伺服器端收到一個客戶端的連接時就得到了客戶端的IP地址和埠了。
通俗點好比我們上午,我們需要知道網站的地址,而網站伺服器不需要知道我們的地址,我們訪問網站後網站自然會將我們需要的東西按照我們請求中的地址發回來
4. 在windows下用C語言如何實現socket網路編程,需要用到哪些頭文件或者庫
需要用到的頭文件包含:
#include <winsock2.h>
#include <windows.h>
與Linux環境下socket編程相比,windows環境多了一個步驟:啟動或者初始化winsock庫
Winsock,一種標准API,一種網路編程介面,用於兩個或多個應用程序(或進程)之間通過網路進行數據通信。具有兩個版本:
Winsock 1:
Windows CE平台支持。
頭文件:WinSock.h
庫:wsock32.lib
Winsock 2:
部分平台如Windows CE貌似不支持。通過前綴WSA可以區別於Winsock 1版本。個別函數如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都屬於Winsock 1.1規范的函數;
頭文件:WinSock2.h
庫:ws2_32.lib
mswsock.h用於編程擴展,使用時必須鏈接mswsock.dll
(4)孫鑫網路編程擴展閱讀
winsock庫的載入與卸載:
載入:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
載入成功,返回值為0。
WORD wVersionRequested:載入的winsock版本,使用宏MAKEWORD(x, y),x表示高位元組,y表示低位元組。然而使用時MAKEWORD(2, 2)。高位元組與低位元組相同~~
LPWSADATA lpWSAData:WSADATA結構的指針,傳入參數後,系統幫助我們填充版本信息。有興趣的可以看看結構體內容,不過基本用不著。
卸載:int WSACleanup(void);比起載入,卸載的函數真是輕松愉快。
5. 孫鑫 VC++ 14章網路編程 疑問
伺服器端不停列印:My name is cwj
客戶端不停列印:Welcome 127.0.0.1 to Amercian!
6. 看孫鑫VC視頻14課網路編程Sprintf函數的用法怎麼用啊
sbuffer錯了。
不能是char sbuffer;
應該是char sbuffer[100];
或char* sbuffer;sbuffer=malloc(100*sizeof(char));之類。
sprintf中的第一個參數是緩沖區首地址,就是存放sprintf輸出內容的地方。要求是char*類型。所以用char變數作第一個參數當然會提示錯誤。
7. C++ 實現 多媒體+網路編程,實現在線看視屏,或聽音樂的功能
《Visual C++網路編程經典案例詳解》由淺入深、循序漸進地向讀者介紹了Visual C++網路編程的基礎知識,並且在此基礎上講解了常見的Visual C++網路編程技術及典型應用案例,最終使讀者從根本上提高自身的編程水平,能夠獨立開發網路應用程序。《Visual C++網路編程經典案例詳解》內容包括網路編程基礎知識、Socket套接字編程基礎、多線程技術、FTP瀏覽器實常式序、網頁瀏覽器實常式序、網路通信器、郵件收發器、實用播放器、網路文件傳輸器、P2P網路播放器、Q版聊天軟體的實現、串口通信技術等。《Visual C++網路編程經典案例詳解》最後專門講解了如何用Visual C++實現發送手機簡訊的案例,其中具體講解了串口通信編程的實現方法、所需要的硬體設備以及數據封裝等知識。
《Visual C++網路編程經典案例詳解》配套光碟中提供了作者專門為《Visual C++網路編程經典案例詳解》錄制的多媒體語音教學視頻和《Visual C++網路編程經典案例詳解》所涉及的源代碼,這些源代碼都經過精心調試,在Windows XP和Windows 2003下測試通過。
《Visual C++網路編程經典案例詳解》適合廣大用Visual C++進行網路程序開發的人員和想進一步提升網路編程水平的人員閱讀,尤其適合具有一定C語言基礎和C++語言基礎的人員或大中專院校的學生閱讀。
8. 孫鑫的JAVA視頻看懂瞭然後學什麼
現在你不是看書的時候了,你都看懂了就應該找些小項目去實踐來鞏固和加深你的學習,你看一百遍書,還不如你做把JAVA基礎知識應用到你自己動手的小項目強
那我就推薦下 你可以做一個考試系統,首先要做登陸,才可以考試,而且都只能用java基礎知識裡面的內容,考試題可以只做三道考試題,不用做多了,是那個意思就行,考試系統的其它要求,要求考試超時自動提交,而且由電腦評分,先只做全部是選擇題的,數據隨便你存哪,可以考慮先存在字元串數組,完成,完成後可以把數據存在XML或資料庫里,從資料庫里存取,如果你有精力,有時間,也可以考慮做一個客戶端程序,一個伺服器程序通信,實現網上考試,
碰到一個問題可以盡量使用JAVA基礎知識裡面的技術,作為練習
還有重要的一點 就是你在編寫小項目的時候,肯定會碰到問題和錯誤,這時候別覺得你很不行,正好相反,解決問題這時候正是你正在不知不覺提高能力的時候,解決錯誤你要知道下JAVA的單步運行,調試DEBUG,還有一定要知道看錯誤消息,否則在JAVA學習在舉步艱難
9. 孫鑫C++視頻教程里的網路編程在哪節啊
在第14、15課(15中有程序實例)
10. 關於孫鑫老師chat程序的問題
你發到誰機子上面了?我猜測很可能你發給的人不是你同學或同事什麼的吧,就是說你必須發給跟你一個區域網的人,我也看過孫鑫的視頻,學習過一點網路編程的基礎,我以前也試過。一般的那些網路編程程序都是只能在區域網運行聊天的,因為不在一個區域網就要利用一些技術,否則程序根本找不到你程序裡面的要連接的那個IP,要通過一定的技術才能超越區域網找到IP。你想想,整個Internet網路有多少台電腦啊,就通過一個IP簡單的找到還是不容易的,得採用一定的編程技術,具體的我沒弄過,如果你只是學習一下網路編程,現在可以不用研究那麼深吧。