Windows網路程式設計(二):Socket簡介
阿新 • • 發佈:2018-11-27
Socket簡介
Socket被稱為套接字,描述了IP和埠等資訊,是一個通訊鏈的控制代碼。
微軟專門開發了一套支援多種網路協議的網路程式設計介面,叫做Winsock,Winsock是Windos SDK的一部分,全稱Windows Sockets API。它對多種協議做了封裝,Socket就是Winsock對TCP協議的封裝。
vc++是微軟開發的一套開發工具,它不僅支援C和C++,還提供一套視覺化程式設計框架MFC。雖然MFC很強大,但是Windos API開發出的程式體積更小、效率更快。
Socket通訊流程
Winsock定義了一系列介面用於建立兩臺或多臺機器之間的通訊,最常見的是一臺伺服器跟多臺客戶機的通訊。
伺服器建立Socket程式流程
WSAStartup()->socket()->bind()->listen()->accept()->recv/send()->closesocket()
客戶端建立Socket程式流程
WSAStartup()->socket()->connect()->send()/recv()->closesocket()
重點介紹一下bind()函式,這個函式用來給套接字繫結埠和IP資訊:
int bind(SOCKET s,const struct sockaddr FAR *name, int namelen);
s:新建立的套接字,後面的提供的IP和埠會繫結它
name:這個結構體儲存了IP和埠等資訊,定義如下:
struct sockaddr{
u_short sa_family;
char sa_data[14];
}
sockaddr是為了保持各個特定協議之間的相容性而設計的,這個結構體再細分就是:
struct sockaddr_in{
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}
第三個成員是個in_addr結構體,定義如下:
struct in_addr{
union{
struct{ u_char s_b1,s_b2,s_b3,s_b4;}S_un_b;
struct{ u_short s_w1,s_w2;}S_un_w;
u_long S_addr;
}S_un;
}