WSAStartup()函数以及DLL的加载
WinSock(Windows Socket)編程依賴于系統提供的動態鏈接庫(DLL),有兩個版本:
- 較早的DLL是?wsock32.dll,大小為 28KB,對應的頭文件為 winsock1.h;
- 最新的DLL是?ws2_32.dll,大小為 69KB,對應的頭文件為?winsock2.h。
幾乎所有的 Windows 操作系統都已經支持 ws2_32.dll,包括個人操作系統 Windows 95 OSR2、Windows 98、Windows Me、Windows 2000、XP、Vista、Win7、Win8、Win10 以及服務器操作系統 Windows NT 4.0 SP4、Windows Server 2003、Windows Server 2008 等,所以你可以毫不猶豫地使用最新的 ws2_32.dll。
使用 DLL 之前必須把 DLL 加載到當前程序,你可以在編譯時加載,也可以在程序運行時加載,我們已在《動態鏈接庫DLL的加載:隱式加載(載入時加載)和顯式加載(運行時加載)》進行了講解。
這里使用#pragma命令,在編譯時加載:
WSAStartup() 函數
使用 DLL 之前,還需要調用?WSAStartup() 函數進行初始化,以指明 WinSock 規范的版本,它的原型為:
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);wVersionRequested 為 WinSock 規范的版本號,低字節為主版本號,高字節為副版本號(修正版本號);lpWSAData 為指向 WSAData 結構體的指針。
關于 WinSock 規范
WinSock 規范的最新版本號為 2.2,較早的有 2.1、2.0、1.1、1.0,ws2_32.dll 支持所有的規范,而 wsock32.dll 僅支持 1.0 和 1.1。
wsock32.dll 已經能夠很好的支持 TCP/IP 通信程序的開發,ws2_32.dll 主要增加了對其他協議的支持,不過建議使用最新的?2.2?版本。
wVersionRequested 參數用來指明我們希望使用的版本號,它的類型為 WORD,等價于?unsigned short,是一個整數,所以需要用 MAKEWORD() 宏函數對版本號進行轉換。例如:
關于 WSAData 結構體
WSAStartup() 函數執行成功后,會將與 ws2_32.dll 有關的信息寫入 WSAData 結構體變量。WSAData 的定義如下:
最后3個成員已棄之不用,szDescription 和?szSystemStatus 包含的信息基本沒有實用價值,讀者只需關注前兩個成員即可。請看下面的代碼:
運行結果:
wVersion: 2.2
wHighVersion: 2.2
szDescription: WinSock 2.0
szSystemStatus: Running
ws2_32.dll 支持的最高版本為 2.2,建議使用的版本也是 2.2。
綜上所述:WinSock 編程的第一步就是加載 ws2_32.dll,然后調用 WSAStartup() 函數進行初始化,并指明要使用的版本號。
總結
以上是生活随笔為你收集整理的WSAStartup()函数以及DLL的加载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows下的socket演示程序
- 下一篇: 计算机一级某学校师资情况表,2011年计