1. 程式人生 > 其它 >【Socket程式設計】WSAStartup()與WSACleanup()

【Socket程式設計】WSAStartup()與WSACleanup()

socket程式設計中SAStartup()與WSACleanup()的功能與使用方法

WSAStartup()

一句話解釋:wsastart的功能就是進行相應的socket庫繫結

這裡用通俗的語言解釋一下這個函式,就類似於opencv一樣,要新增連結庫函式,cv.lib等,要新增到附加依賴項,或者通過#pragma comment(lib,”cv.lib“)一樣,然後才能包含標頭檔案進行各種函式的呼叫。當然了,socket程式設計要呼叫各種socket函式,但是需要庫Ws2_32.lib和標頭檔案Winsock2.h,這裡的WSAStartup就是為了向作業系統說明,我們要用哪個庫檔案,讓該庫檔案與當前的應用程式繫結,從而就可以呼叫該版本的socket的各種函數了。

header: Winsock2.h

library: Ws2_32.lib

原型:

int PASCAL FAR WSAStartup ( WORD wVersionRequested, LPWSADATA lpWSAData );

引數:

wVersionRequestedWindows Sockets API提供的呼叫方可使用的最高版本號高位位元組指出副版本(修正)號低位位元組指明主版本號
lpWSAData 是指向WSADATA資料結構的指標,用來接收Windows Sockets實現的細節。

使用Socket的程式在使用Socket之前必須呼叫WSAStartup函式。以後應用程式就可以呼叫所請求的Socket庫中的其它Socket函數了。

當一個應用程式呼叫WSAStartup函式時,作業系統根據請求的Socket版本來搜尋相應的Socket庫,然後繫結找到的Socket庫到該應用程式中。以後應用程式就可以呼叫所請求的Socket庫中的其它Socket函數了。該函式執行成功後返回0。

例:假如一個程式要使用2.1版本的Socket,那麼程式程式碼如下
wVersionRequested = MAKEWORD( 2, 1 );
err = WSAStartup( wVersionRequested, &wsaData );

WSACleanup()

一句話解釋:wsacleanup的功能就是解除與socket庫的繫結並且釋放socket庫所佔用的系統資源

int WSACleanup(void)

在Windows下,Socket是以DLL的形式實現的。在DLL內部維持著一個計數器,只有第一次呼叫WSAStartup才真正裝載DLL,以後的呼叫只是簡單的增加計數器,而WSACleanup函式的功能則剛好相反,每呼叫一次使計數器減1,當計數器減到0時,DLL就從記憶體中被解除安裝!因此,你呼叫了多少次WSAStartup,就應相應的呼叫多少次的WSACleanup.

參考文章:

WSAStartUp詳細的解釋為什麼首先呼叫這個函式_使用者1259629212_新浪部落格 (sina.com.cn)