初始化Winsock庫


Winsock庫對Windows的Socket編程有很好的支持,它提供了所有Socket相關的API函數。常用的Winsock庫有1和2兩個版本,流行應用程序使用的是Winsock2版本。其對應的動態鏈接庫是WS2_32.dll,使用時需要包含Winsock2.h頭文件,並要導入WS2_32.lib庫文件。無論是使用哪種協議,無論是客戶端還是服務端,在進行Socket編程之前首先應該對Winsock庫(WS2_32.dll)進行初始化,完成初始化Winsock庫工作的API函數是WSAStartup,其函數原型如下。

int WSAStartup(
  WORD   wVersionRequested,   //指定調用者能夠使用的Winsock的最高版本
  LPWSADATA lpWSAData       //執行WSADATA結構體的指針
);

第一個參數wVersionRequested指定調用者使用的Winsock的最高版本,它是一個WORD類型,高字節表示副版本號,低字節表示主版本號。通常使用MAKEWORD宏構造此參數。第二個參數lpWSAData是一個指向WSADATA結構體的指針,用來接收所使用的Winsock庫的詳細信息。WSADATA結構體定義如下。

typedef struct WSAData {
        WORD                wVersion;                               //版本
        WORD               wHighVersion;                        //最高版本
#ifdef _WIN64
        unsigned short     iMaxSockets;
        unsigned short     iMaxUdpDg;
        char FAR *         lpVendorInfo;
        char               szDescription[WSADESCRIPTION_LEN+1];
        char               szSystemStatus[WSASYS_STATUS_LEN+1];
#else
        char               szDescription[WSADESCRIPTION_LEN+1]; //描述字符串
        char               szSystemStatus[WSASYS_STATUS_LEN+1]; //系統狀態字符串
        unsigned short     iMaxSockets;                         //最大套接字數量
        unsigned short     iMaxUdpDg;                           //版本2中忽略
        char FAR *         lpVendorInfo;                        //版本2中忽略
#endif
} WSADATA, FAR * LPWSADATA;

 函數執行成功返回0,否則將返回如下錯誤代碼。

WSASYSNOTREADY          //網絡未就緒
WSAVERNOTSUPPORTED      //不支持的版本
WSAEINPROGRESS          //版本1的Winsock模塊正在進行中
WSAEPROCLIM             //已經達到限制值
WSAEFAULT               //lpWSAData是一個無效指針
 

 當Winsock庫使用完畢后應該使用WSACleanup函數終止對Winsock庫(WS2_32.dll)的調用。在多線程環境下,WSACleanup將終止所有線程的Scoket操作。函數原型如下。

int WSACleanup(void)

函數執行成功則返回0,執行失敗則返回SOCKET_ERROR值。可以調用WSAGetLastError函數獲得錯誤代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM