WinSock提供了許多套接字函數(shù),它們并不代表協(xié)議的某一個層次,其實質(zhì)就是一組編程接口,用戶利用這些函數(shù)可以很容易地進行編程。
(1)socket函數(shù)
socket函數(shù)用于創(chuàng)建一個套接字。
語法:
SOCKET socket ( int af, int type, int protocol );
af:標識一個地址家族,通常為AF_INET。
type:標識套接字類型,如果為SOCK_STREAM,表示流式套接字;如果為SOCK_DGRAM,表示數(shù)據(jù)報套接字。
protocol:標識一個特殊的協(xié)議被用于這個套接字,通常為0,表示采用默認的TCP/IP協(xié)議。
(2)accpet函數(shù)
accpet函數(shù)用于接受客戶端的連接請求。返回值是一個新的套接字,它對應(yīng)于已經(jīng)接受的客戶端連接,對于該客戶端的所有后續(xù)操作,都應(yīng)使用這個新的套接字。
語法:
SOCKET accept ( SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen );
s:是一個套接字,它應(yīng)處于監(jiān)聽狀態(tài)。
addr:是一個sockaddr_in結(jié)構(gòu)指針,包含一組客戶端的端口號、IP地址等信息。
addrlen:用于接收參數(shù)addr的長度。
(3)bind函數(shù)
bind函數(shù)用于將套接字綁定到一個已知的地址上。如果函數(shù)執(zhí)行成功,返回值為0,否則為SOCKET_ERROR。
語法:
int bind ( SOCKET s, const struct sockaddr FAR* name, int namelen );
s: 是一個套接字。
name:是一個sockaddr結(jié)構(gòu)指針,該結(jié)構(gòu)中包含了要綁定的地址和端口號。
namelen:確定name緩沖區(qū)的長度。
在定義一個套接字后,需要調(diào)用bind函數(shù)為其指定本機地址、協(xié)議和端口號。
例如,創(chuàng)建一個套接字s,將其綁定到3010端口上,其代碼如下:
int port = 3010; SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP); sockaddr_in addr; addr.sin_family = AF_INET; //內(nèi)部網(wǎng)絡(luò)協(xié)議TCP\UDP等 addr.sin_port = htons(port); //端口號 addr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(s,(LPSOCKADDR)&addr,sizeof(addr))==0) { MessageBox("成功"); }
(4)closesocket函數(shù)
closesocket函數(shù)用于關(guān)閉某個套接字。
語法:
int closesocket ( SOCKET s );
s:標識一個套接字。如果參數(shù)s設(shè)置有SO_DONTLINGER選項,則調(diào)用該函數(shù)后會立即返回,但此時如果有數(shù)據(jù)尚未傳送完畢,會繼續(xù)傳遞數(shù)據(jù),然后才關(guān)閉套接字。
(5)connect函數(shù)
connect函數(shù)用于發(fā)送一個連接請求。如果函數(shù)執(zhí)行成功,返回值為0,否則為SOCKET_ERROR。用戶可以通過WSAGetLastError得到其錯誤描述。
語法:
int connect ( SOCKET s, const struct sockaddr FAR* name, int namelen );
s:標識一個套接字。
name:套接字s想要連接的主機地址和端口號。
namelen:name緩沖區(qū)的長度。
(6)htons函數(shù)
htons函數(shù)將一個16位的無符號短整型數(shù)據(jù)由主機排列方式轉(zhuǎn)換為網(wǎng)絡(luò)排列方式。
語法:
u_short htons ( u_short hostshort );
hostshort:一個主機排列方式的無符號短整型數(shù)據(jù)。
(7)htonl函數(shù)
htonl函數(shù)將一個32位的無符號長整型數(shù)據(jù)由主機排列方式轉(zhuǎn)換為網(wǎng)絡(luò)排列方式。
語法:
u_long htonl ( u_long hostlong );
hostlong:一個主機排列方式的無符號長整型數(shù)據(jù)。
(8)inet_addr函數(shù)
inet_addr函數(shù)將一個由字符串表示的地址轉(zhuǎn)換為32位的無符號長整型數(shù)據(jù)。
語法:
unsigned long inet_addr ( const char FAR * cp );
cp:一個表示IP地址的字符串。
(9)listen函數(shù)
listen函數(shù)用于將套接字置入監(jiān)聽模式。
語法:
int listen ( SOCKET s, int backlog );
s:套接字。
backlog:表示等待連接的大隊列長度。例如,如果backlog被設(shè)置為3,此時有4個客戶端同時發(fā)出連接請求,那么前3個客戶端連接會放置在等待隊列中,第4個客戶端會得到錯誤信息。
(10)recv函數(shù)
recv函數(shù)用于從連接的套接字中返回數(shù)據(jù)。
語法:
int recv ( SOCKET s, char FAR* buf, int len, int flags );
recv函數(shù)參數(shù)的說明如表18.5所示。
表18.5 recv函數(shù)參數(shù)說明
參數(shù)名稱 參 數(shù) 描 述
S 標識一個套接字
Buf 是接收數(shù)據(jù)的緩沖區(qū)
Len 是buf的長度
Flags 表示函數(shù)的調(diào)用方式,可選值如下:MSG_PEEK_用來查看傳來的數(shù)據(jù),在序列前端的數(shù)據(jù)會被復(fù)制一份到返回緩沖區(qū)中,但是這個數(shù)據(jù)不會從序列中移走MSG_OOB_用來處理Out-Of-Band數(shù)據(jù)
(11)select函數(shù)
select函數(shù)用來檢查一個或多個套接字是否處于可讀、可寫或錯誤狀態(tài)。
語法:
int select ( int nfds, fd_set FAR * readfds, fd_set FAR * writefds, fd_set FAR * exceptfds, const struct timeval FAR * timeout );
select函數(shù)參數(shù)說明如表18.6所示。
表18.6 select函數(shù)參數(shù)說明
參數(shù)名稱 參數(shù)描述
nfds 沒有實際意義,只是為了和UNIX下的套接字兼容
readfds 標識一組被檢查可讀的套接字
writefds 標識一組被檢查可寫的套接字
exceptfds 是被檢查有錯誤的套接字
timeout 標識函數(shù)的等待時間
(12)send函數(shù)
send函數(shù)在已經(jīng)建立連接的套接字上發(fā)送數(shù)據(jù)。
語法:
int send ( SOCKET s, const char FAR * buf, int len, int flags );
send函數(shù)參數(shù)說明如表18.7所示。
表18.7 send函數(shù)參數(shù)說明
參數(shù)名稱 參數(shù)描述
s 標識一個套接字
buf 是存放要發(fā)送數(shù)據(jù)的緩沖區(qū)
len 標識緩沖區(qū)長度
flags 標識函數(shù)的調(diào)用方式
(13)WSAStartup函數(shù)
WSAStartup函數(shù)用于初始化WS2_32動態(tài)庫。它應(yīng)該是應(yīng)用程序第1個調(diào)用的Windows Socket函數(shù),用于確定Windows Socket使用的版本。
語法:
int WSAStartup ( WORD wVersionRequested, LPWSADATA lpWSAData );
wVersionRequested:標識調(diào)用者使用的Windows Socket的版本,高字節(jié)記錄修訂版本,低字節(jié)記錄主版本。例如,如果Windows Socket的版本為2.1,則高字節(jié)記錄1,低字節(jié)記錄2。
lpWSAData:記錄Windows Socket的詳細信息。
下面的代碼用于確定Windows Socket使用的版本。
WSADATA wsd; WSAStartup(MAKEWORD(2,2),&wsd);
14)WSACleanup函數(shù)
WSACleanup函數(shù)與WSAStartup函數(shù)是相對的,用于終止使用WS2_32動態(tài)庫。
語法:
int WSACleanup (void);
(15)WSAAsyncSelect函數(shù)
WSAAsyncSelect函數(shù)用于將網(wǎng)絡(luò)中發(fā)生的事件關(guān)聯(lián)到窗口的某個消息中。
語法:
int WSAAsyncSelect ( SOCKET s, HWND hWnd, unsigned int wMsg, long lEvent );
WSAAsyncSelect函數(shù)參數(shù)說明如表18.8所示。
表18.8 WSAAsyncSelect函數(shù)參數(shù)說明
參數(shù)名稱 參數(shù)描述
s 標識套接字
hWnd 標識窗口句柄
wMsg 標識窗口消息
lEvent 標識網(wǎng)絡(luò)中的事件
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站題目:WinSockAPI相關(guān)函數(shù)-創(chuàng)新互聯(lián)
新聞來源:http://aaarwkj.com/article8/ccdsop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站設(shè)計公司、網(wǎng)站制作、網(wǎng)站策劃、微信小程序、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容