winsock api 選項(xiàng)配置

winsock api 選項(xiàng)配置

ID:23870025

大?。?0.50 KB

頁(yè)數(shù):5頁(yè)

時(shí)間:2018-11-11

winsock api 選項(xiàng)配置_第1頁(yè)
winsock api 選項(xiàng)配置_第2頁(yè)
winsock api 選項(xiàng)配置_第3頁(yè)
winsock api 選項(xiàng)配置_第4頁(yè)
winsock api 選項(xiàng)配置_第5頁(yè)
資源描述:

《winsock api 選項(xiàng)配置》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、WinsockAPI選項(xiàng)配置摘要 介紹了icrosoft聯(lián)合了其他幾家公司共同制定了一套,當(dāng)套接字為數(shù)據(jù)報(bào)類型時(shí),type應(yīng)設(shè)置為SOCK_DGRAM,如果是可以直接訪問(wèn)IP協(xié)議的原始套接字則type應(yīng)設(shè)置為SOCK_RAily;/*addresstype*/charsa_data[14];/*protocoladdress*/}其中sa_family意指套接字使用的協(xié)議族地址類型,對(duì)于一般的TCP/IP網(wǎng)絡(luò),其值應(yīng)該是AF_I,sa_data是存儲(chǔ)地址協(xié)議信息的數(shù)組,不同的協(xié)議族有不同的地址,但是都可以存在這個(gè)通用的結(jié)構(gòu)體里面,通常的做法是將不同的協(xié)議轉(zhuǎn)換成相同

2、的協(xié)議地址,然后再進(jìn)行通訊。用于TCP/IP協(xié)議族的套接字地址結(jié)構(gòu)是sockaddr_in,其定義為:structsockaddr_in{shortsin_family;unsignedshortsin_port;IN_ADDRsin_addr;charsin_zero[8];};其中sin_zero成員并未使用,它是為了和通用套接字地址structsockaddr兼容性而設(shè)定的。在編程中,一般都通過(guò)bzero()或是memset()將其置零。servaddr.sin_family=AF_I;表示套接字使用TCP/IP協(xié)議族。servaddr.sin_addr.s

3、_addr=htonl(INADDR_ANY);設(shè)置服務(wù)器套接字的IP地址為特殊值INADDR_ANY,表示服務(wù)器愿意接收來(lái)自任何網(wǎng)絡(luò)設(shè)備接口的客戶機(jī)連接。htonl()函數(shù)將主機(jī)順序的字節(jié)轉(zhuǎn)換成網(wǎng)絡(luò)順序的字節(jié)。servaddr.sin_port=htons(PORT);設(shè)置通信端口號(hào),PORT即用于通訊的端口號(hào)。3.2bind()將一本地地址與一套接字捆綁。intbind(SOCKETs,conststructsockaddr*name,intnamelen);s:未綁定的套接字。name:套接字地址。sockaddr結(jié)構(gòu)定義如下:structsockaddr{

4、u_shortsa_family;charsa_data[14];};namelen:name名字的長(zhǎng)度。本函數(shù)適用于未連接的數(shù)據(jù)報(bào)或流類套接字,在listen()調(diào)用前使用。當(dāng)用socket()創(chuàng)建套接字后,它便存在于一個(gè)名字空間(地址族)中,但并未賦名。bind()函數(shù)通過(guò)給一個(gè)未命名套接字分配一個(gè)本地名字來(lái)為套接字建立本地捆綁。如果端口號(hào)置為0,則e()來(lái)獲知所分配的地址,但getsockname()只有在套接字連接成功后才會(huì)正確的得到分配的地址。3.3listen()intlisten(intsockfd,intbacklog);參數(shù)sockfd指定要求轉(zhuǎn)

5、換的套接字描述符,參數(shù)backlog設(shè)置請(qǐng)求隊(duì)列的最大長(zhǎng)度。函數(shù)listen()主要完成以下操作:  首先是將套接字轉(zhuǎn)換成監(jiān)聽(tīng)套接字??蛻魴C(jī)可以通過(guò)調(diào)用函數(shù)connect()來(lái)使用這樣的套接字主動(dòng)和服務(wù)器建立連接。而listen()可將一個(gè)服務(wù)端尚未連接的主動(dòng)套接字轉(zhuǎn)換成為這樣的"被動(dòng)"套接字,也就是監(jiān)聽(tīng)套接字。在執(zhí)行了listen()函數(shù)之后,服務(wù)器的TCP就由CLOSED變成LISTEN狀態(tài)了。另外listen()可以設(shè)置連接請(qǐng)求隊(duì)列的最大長(zhǎng)度。TCP協(xié)議為每個(gè)傾聽(tīng)套接字實(shí)際上維護(hù)兩個(gè)隊(duì)列,一個(gè)是未完成連接隊(duì)列,這個(gè)隊(duì)列中的成員都是未完成3次握手的連接;另一個(gè)

6、是完成連接隊(duì)列,這個(gè)隊(duì)列中的成員都是雖然已經(jīng)完成了3次握手,但是它是還未被服務(wù)器調(diào)用accept()接收的連接。參數(shù)backlog指定的是這個(gè)傾聽(tīng)套接字完成連接隊(duì)列的最大長(zhǎng)度。3.4accept()intaccept(intsockfd,structsockaddr*addr,int*addrlen);參數(shù)sockfd是轉(zhuǎn)換成功并且得到的傾聽(tīng)套接字;參數(shù)addr是一個(gè)指向套接字地址結(jié)構(gòu)的指針,參數(shù)addrlen為一個(gè)整型指針。當(dāng)函數(shù)成功執(zhí)行時(shí),返回3個(gè)結(jié)果,函數(shù)返回一個(gè)新的套接字,即接收套接字,服務(wù)器可以通過(guò)這個(gè)新的套接字描述符和客戶機(jī)進(jìn)行通信。參數(shù)addr所指向

7、的套接字地址結(jié)構(gòu)中將存放客戶機(jī)的相關(guān)信息,addrlen指針將描述前述套接字地址結(jié)構(gòu)的長(zhǎng)度。在通常情況下程序服務(wù)端對(duì)后面兩個(gè)參數(shù)信息不是很感興趣,我們可以忽略他們,因此通常我們將accept()函數(shù)的后兩個(gè)參數(shù)都設(shè)置為NULL。3.5connect()intconnect(intsockfd,structsockaddr*servaddr,intaddrlen);參數(shù)sockfd是調(diào)用函數(shù)socket()返回的套接字描述符,參數(shù)servaddr指向遠(yuǎn)程服務(wù)器的套接字地址結(jié)構(gòu),參數(shù)addrlen指定這個(gè)套接字地址結(jié)構(gòu)的長(zhǎng)度。函數(shù)connect()執(zhí)行成功時(shí)返回"0"

8、,如果執(zhí)行

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。