Windows環境下進行socket編程


  • 編譯環境
    操作系統 windows 10
    編譯器 Dev-C++
  • 使用語言
    C語言

在Dev中編譯socket程序,需要設置編譯環境,有以下兩種方法:

  1. 新建project為win32 console,

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

    如果沒有添加動態庫,則編譯時會出現連接錯誤。

  2. 菜單 “工具”——>“編譯選項”——>“編譯器”選項卡——勾選“編譯時加入以下命令”,添加命令:-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);比起加載,卸載的函數真是輕松愉快。


免責聲明!

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



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