Windows網絡編程(二):Socket簡介

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;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章