1. 程式人生 > >Windows網路程式設計(二):Socket簡介

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;

}