本文是我在進行MS-Windows、HP-Unix網路編程的實踐過程中總結出來的一些經驗,僅供大家參考。本文所談到的Socket函數如果沒有特別說明,都是指的Windows Socket API。
一、WSAStartup函數
int WSAStartup(
WORD wVersionRequested,
LPWSADATA lpWSAData
);
使用Socket的程式在使用Socket之前必須調用WSAStartup函數。該函數的第一個參數指明程式請求使用的Socket版本,其中高位位元組指明副版本、低位位元組指明主要版本;作業系統利用第二個參數返回請求的Socket的版本資訊。當一個應用程式調用WSAStartup函數時,作業系統根據請求的Socket版本來搜尋相應的Socket庫,然後綁定找到的Socket庫到該應用程式中。以後應用程式就可以調用所請求的Socket庫中的其它Socket函數了。該函數執行成功後返回0。
例:假如一個程式要使用2.1版本的Socket,那麼程式碼如下
wVersionRequested = MAKEWORD( 2, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
二、WSACleanup函數
int WSACleanup (void);
應用程式在完成對請求的Socket庫的使用後,要調用WSACleanup函數來解除與Socket庫的綁定並且釋放Socket庫所佔用的系統資源。
三、socket函數
SOCKET socket(
int af,
int type,
int protocol
);
應用程式調用socket函數來建立一個能夠進行網路通訊的通訊端。第一個參數指定應用程式使用的通訊協定的協議族,對於TCP/IP協議族,該參數置PF_INET;第二個參數指定要建立的通訊端類型,流通訊端類型為SOCK_STREAM、資料通訊端類型為SOCK_DGRAM;第三個參數指定應用程式所使用的通訊協定。該函數如果調用成功就返回新建立的通訊端的描述符,如果失敗就返回INVALID_SOCKET。通訊端描述符是一個整數類型的值。每個進程的進程空間裡都有一個通訊端描述符表,該表中存放著通訊端描述符和通訊端資料結構的對應關係。該表中有一個欄位存放新建立的通訊端的描述符,另一個欄位存放通訊端資料結構的地址,因此根據通訊端描述符就可以找到其對應的通訊端資料結構。每個進程在自己的進程空間裡都有一個通訊端描述符表但是通訊端資料結構都是在作業系統的核心緩衝裡。下面是一個建立流通訊端的例子: