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