久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

9、socket編程九:WSAStartup()函數(shù)以及DLL的加載_調(diào)用wsastartup函數(shù),,加載winsock庫(kù)

 補(bǔ)丁牛仔褲 2023-05-04 發(fā)布于廣東
   本節(jié)講解 Windows 下 DLL 的加載,,學(xué)習(xí)  Linux Socket 的讀者可以跳過(guò)。

WinSock(Windows Socket)編程依賴于系統(tǒng)提供的動(dòng)態(tài)鏈接庫(kù)(DLL),,有兩個(gè)版本:

  • 較早的DLL是 wsock32.dll,,大小為 28KB,對(duì)應(yīng)的頭文件為 winsock1.h,;
  • 最新的DLL是 ws2_32.dll,,大小為 69KB,對(duì)應(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í)加載,,我們已在《動(dòng)態(tài)鏈接庫(kù)DLL的加載:隱式加載(載入時(shí)加載)和顯式加載(運(yùn)行時(shí)加載)》進(jìn)行了講解,。

這里使用#pragma命令,在編譯時(shí)加載:

#pragma comment (lib, "ws2_32.lib")

WSAStartup() 函數(shù)

使用 DLL 之前,,還需要調(diào)用 WSAStartup() 函數(shù)進(jìn)行初始化,,以指明 WinSock 規(guī)范的版本,它的原型為:

int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

wVersionRequested 為 WinSock 規(guī)范的版本號(hào),,低字節(jié)為主版本號(hào),,高字節(jié)為副版本號(hào)(修正版本號(hào));lpWSAData 為指向 WSAData 結(jié)構(gòu)體的指針,。

關(guān)于 WinSock 規(guī)范

WinSock 規(guī)范的最新版本號(hào)為 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 主要增加了對(duì)其他協(xié)議的支持,,不過(guò)建議使用最新的 2.2 版本,。

wVersionRequested 參數(shù)用來(lái)指明我們希望使用的版本號(hào),它的類型為 WORD,,等價(jià)于 unsigned short,,是一個(gè)整數(shù),所以需要用 MAKEWORD() 宏函數(shù)對(duì)版本號(hào)進(jìn)行轉(zhuǎn)換,。例如:

MAKEWORD(1, 2);  //主版本號(hào)為1,,副版本號(hào)為2,返回 0x0201
MAKEWORD(2, 2);  //主版本號(hào)為2,,副版本號(hào)為2,,返回 0x0202

關(guān)于 WSAData 結(jié)構(gòu)體

WSAStartup() 函數(shù)執(zhí)行成功后,會(huì)將與 ws2_32.dll 有關(guān)的信息寫入 WSAData 結(jié)構(gòu)體變量,。WSAData 的定義如下:

  1. typedef struct WSAData {
  2. WORD wVersion; //ws2_32.dll 建議我們使用的版本號(hào)
  3. WORD wHighVersion; //ws2_32.dll 支持的最高版本號(hào)
  4. //一個(gè)以 null 結(jié)尾的字符串,,用來(lái)說(shuō)明 ws2_32.dll 的實(shí)現(xiàn)以及廠商信息
  5. char szDescription[WSADESCRIPTION_LEN+1];
  6. //一個(gè)以 null 結(jié)尾的字符串,用來(lái)說(shuō)明 ws2_32.dll 的狀態(tài)以及配置信息
  7. char szSystemStatus[WSASYS_STATUS_LEN+1];
  8. unsigned short iMaxSockets; //2.0以后不再使用
  9. unsigned short iMaxUdpDg; //2.0以后不再使用
  10. char FAR *lpVendorInfo; //2.0以后不再使用
  11. } WSADATA, *LPWSADATA;

最后3個(gè)成員已棄之不用,,szDescription 和 szSystemStatus 包含的信息基本沒(méi)有實(shí)用價(jià)值,,讀者只需關(guān)注前兩個(gè)成員即可。請(qǐng)看下面的代碼:

  1. #include <stdio.h>
  2. #include <winsock2.h>
  3. #pragma comment (lib, "ws2_32.lib")
  4. int main(){
  5. WSADATA wsaData;
  6. WSAStartup( MAKEWORD(2, 2), &wsaData);
  7. printf("wVersion: %d.%d\n", LOBYTE(wsaData.wVersion), HIBYTE(wsaData.wVersion));
  8. printf("wHighVersion: %d.%d\n", LOBYTE(wsaData.wHighVersion), HIBYTE(wsaData.wHighVersion));
  9. printf("szDescription: %s\n", wsaData.szDescription);
  10. printf("szSystemStatus: %s\n", wsaData.szSystemStatus);
  11. return 0;
  12. }

運(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)行初始化,并指明要使用的版本號(hào),。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多