1、包含標頭檔案
1 #include <WinSock2.h>
2、引入庫檔案
1 #pragma comment(lib,"ws2_32.lib")
3、開啟網路庫
int WSAStartup( WORD wVersionRequired, LPWSADATA lpWSAData );
引數
返回值
錯誤程式碼 | 值 | 含義 |
WSASYSNOTREADY | 10091 | 底層網路子系統尚未準備好進行網路通訊。 |
WSAVERNOTSUPPORTED | 10092 | 不支援給定的版本號,檢查是不是將主版本號設定為0。 |
WSAEINPROGRESS | 10036 | 當一個阻塞函式正在進行時,呼叫任何Windows Sockets API函式均返回此錯誤。 |
WSAEPROCLIM | 10067 | Windows Sockets實現可能限制同時使用它的應用程式的數量,如果達到此限制,則返回該錯誤。 |
WSAEFAULT | 10014 | lpWSAData指標錯誤,檢查是否傳入nullptr。 |
版本號
//MAKEWORD(lowbyte, highbyte) WORD wdVersion = MAKEWORD(2, 1); //構造2.1版本
WSAData結構體
1 struct WSAData { 2 WORD wVersion; //當前使用的版本。 3 WORD wHighVersion; //當前支援的最高版本。 4 unsigned short iMaxSockets; //[2版本棄用]返回當前可用的Socket數量 5 unsigned short iMaxUdpDg; //[2版本棄用]UDP資料包資訊大小 6 char *lpVendorInfo; //[2版本棄用]供應商特定資訊 7 char szDescription[WSADESCRIPTION_LEN + 1]; //以NULL結尾的ASCII字串,描述Win Socket套接字實現說明。 8 char szSystemStatus[WSASYS_STATUS_LEN + 1]; //以NULL結尾的ASCII字串,描述相關狀態或配置資訊。 9 };
4、關閉網路庫
1 int WSACleanup();
返回值
錯誤程式碼 | 值 | 含義 |
WSANOTINITIALISED | 10093 | 在使用該函式之前,必須成功呼叫WSAStartup |
WSAENETDOWN | 10050 | 套接字操作遇到一個不活動的網路。此錯誤可能指示網路系統(例如WinSock DLL執行的協議棧)、網路介面或本地網路本身發生了一個嚴重的失敗。 |
WSAEINPROGRESS | 10036 | 一個阻塞操作正在執行。Windows Sockets只允許一個任務(或執行緒)在同一時間可以有一個未完成的阻塞操作,如果此時呼叫了任何函式,將返回該錯誤。 |
示例程式
1 #include <iostream> 2 #include <WinSock2.h> 3 #pragma comment(lib,"ws2_32.lib") 4 using namespace std; 5 6 const unsigned short MajorVersion = 2; //主版本號 7 const unsigned short MinorVersion = 2; //副版本號 8 9 int main() 10 { 11 WORD wdVersion = MAKEWORD(MajorVersion, MinorVersion); 12 WSAData wSocketInfo; 13 int nRet = WSAStartup(wdVersion, &wSocketInfo); 14 if (nRet != 0) 15 { 16 std::cout << "open error!" << std::endl; 17 return; 18 } 19 20 //版本檢驗 21 if (MinorVersion != HIBYTE(wSocketInfo.wVersion) || 22 MajorVersion != LOBYTE(wSocketInfo.wVersion)) 23 { 24 assert(0); 25 WSACleanup(); 26 return 0; 27 } 28 ... 29 30 WSACleanup(); 31 }
參考
Windows Sockets 錯誤碼及出錯原因-chenshko-ChinaUnix部落格