首先建議讀者明白網絡、IP地址、協議等概念。應用層協議TeLnet,FTP,HTTP,DNS,SMTP,POP3等。傳輸層協議TCP(面向連接、可靠),UDP(無連接不可靠)。UDP實時性好,故廣泛使用.網絡層協議IP,ICMP(互聯網控制報文協議),IGMP(Internet組管理協議).
數據封裝:每一層都會加上自己的信息頭或者稱為協議頭.有的層也會加入尾部.傳輸可以看成為一個在發送端不斷封裝,接受端不斷解封.
端口:TCP/IP協議提出了端口概念,包括數據結構和I/O緩沖區.用一個整數型標識符來表示,用16位表示,從0~65534,我們應用程序使用1024以上的端口號.
套接字Socket:應用程序訪問通信協議的一種操作系統調用,用於快速方便的開發網絡程序.Windows Sockets只支持一個通信區域(AF_INET),這個域被使用網際協議通信區域通信的進程所使用.注意:基於Intel的CPU采用低位先存格式,而TCP/IP協議采用高位先存格式.
Windows Sockets提高了很多異步函數供我們使用.可以使用任何底層傳輸協議提高的通信能力.其類型包括:流式套接字(基於tcp實現),數據報式套接字(基於udp),還有一種原始套接字.
基於tcp的套接字編程步驟:
clIEnt
1.創建一個套接字.
2.向服務器發請求(connect).
3.和服務器通信.
4.關閉套接字.
server
1.創建套接字.(socket)
2.將套接字邦定到本地地址和端口上(bind)
3.套接字監聽(listen)
4.收到客戶端請求,返回一個新的對應於此次連接的套接字(accept)
其中包括了客戶端的相關信息.
5.用返回的套接字和客戶端進行通信(send/recv);
6.返回,監聽等待另一個用戶.
7.關閉套接字.
基於udp的套接字編程步驟:
sender:
1.創建Socket;
2.向服務器發送消息(sendto);
3.關閉套接字.
receiver:
1.創建Socket;
2.綁定到本地地址端口(listen);
3.接受數據(recvfrom);
4.關閉套接字.