在cmd中輸入netstat -nao | findstr 8888, 然后回車,你一般會得到nothing.
網絡編程,啟動socket
addrSrv.sin_family = AF_INET; // TCP/IP協議族
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_port = htons(8888); // socket對應的端口
再在cmd中執行netstat -nao | findstr 8888, 得到的結果為:
C:\Documents and Settings\Administrator>netstat -nao | findstr 8888
TCP 127.0.0.1:8888 0.0.0.0:0 LISTENING 4352
我來解釋一下, 這表明是tcp socket而不是udp socket, 127.0.0.1是本地地址, 此處是服務器的地址, 8888是服務器的監聽端口, listening表示服務器socket處於監聽狀態, 4352是服務器對應的進程號。 由於還沒有建立tcp連接,所以遠端是0.0.0.0:0, 你可以理解是服務端。
好,別關掉上面的服務器, 運行下面的客戶端程序:
啟動客戶端,連接服務器。
我們再cmd中執行netstat -nao | findstr 8888, 得到的結果為:
C:\Documents and Settings\Administrator>netstat -nao | findstr 8888
TCP 127.0.0.1:2453 127.0.0.1:8888 ESTABLISHED 5520
TCP 127.0.0.1:8888 0.0.0.0:0 LISTENING 4352
TCP 127.0.0.1:8888 127.0.0.1:2453 ESTABLISHED 4352
我們來分析一下:
TCP 127.0.0.1:8888 127.0.0.1:2453 ESTABLISHED 4352
表明一個tcp連接已經建立, 本地服務器IP/Port為127.0.0.1:8888, 遠處的客戶端為127.0.0.1:2453 本地服務器進程號為4352
TCP 127.0.0.1:2453 127.0.0.1:8888 ESTABLISHED 5520
表明一個tcp已經建立, 本地客戶端為127.0.0.1:2453, 遠處的服務器為127.0.0.1:8888, 本地客戶端的進程號為5520
TCP 127.0.0.1:8888 0.0.0.0:0 LISTENING 4352
這是一個全新的、處在監聽狀態的服務器tcp socket, 進程號仍是4352, 因為是同一個進程啊。
上述服務器和客戶端是在同一台電腦上運行的,用的是回測地址。如果你有條件,找兩台電腦,聯網,然后用真實地址, 再嘗試一下,相信會有不少收獲。