- 編譯環境
操作系統 windows 10
編譯器 Dev-C++ - 使用語言
C語言
在Dev中編譯socket程序,需要設置編譯環境,有以下兩種方法:
-
新建project為win32 console,

然后在project的屬性linker里面添加庫libws2_32.a

如果沒有添加動態庫,則編譯時會出現連接錯誤。
-
菜單 “工具”——>“編譯選項”——>“編譯器”選項卡——勾選“編譯時加入以下命令”,添加命令:-lwsock32

與Linux環境下socket編程相比,windows環境多了一個步驟:啟動或者初始化winsock庫
Winsock,一種標准API,一種網絡編程接口,用於兩個或多個應用程序(或進程)之間通過網絡進行數據通信。具有兩個版本:
Winsock 1:
Windows CE平台支持。
頭文件:WinSock.h
庫:wsock32.lib
Winsock 2:
部分平台如Windows CE貌似不支持。通過前綴WSA可以區別於Winsock 1版本。個別函數如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都屬於Winsock 1.1規范的函數;
頭文件:WinSock2.h
庫:ws2_32.lib
mswsock.h用於編程擴展,使用時必須鏈接mswsock.dll
初始化
首先確保包含對應版本的頭文件,然后保證鏈接對應的庫文件
- (可以在代碼中使用#pragma comment(lib, "WS2_32"),或在編譯器項目屬性中鏈接器->輸入->附加依賴項中添加ws2_32.lib)
winsock庫的加載與卸載:
加載:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
加載成功,返回值為0。
WORD wVersionRequested:加載的winsock版本,使用宏MAKEWORD(x, y),x表示高字節,y表示低字節。然而使用時MAKEWORD(2, 2)。高字節與低字節相同~~
LPWSADATA lpWSAData:WSADATA結構的指針,傳入參數后,系統幫助我們填充版本信息。有興趣的可以看看結構體內容,不過基本用不着。
卸載:int WSACleanup(void);比起加載,卸載的函數真是輕松愉快。
