freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

網(wǎng)絡(luò)程序設(shè)計(jì)基本知識(shí)-資料下載頁(yè)

2025-01-06 19:07本頁(yè)面
  

【正文】 的三次握手 , 用來(lái)建立一條與服務(wù)器的 TCP連接 。 如果在調(diào)用該函數(shù)前沒(méi)有調(diào)用 bind(?)來(lái)綁定本地地址 , 則由系統(tǒng)隱式地綁定一個(gè)地址到該套接口 。 該函數(shù)用于使用 UDP的客戶端時(shí) , connect(?)函數(shù)并不是真正地發(fā)出建立連接的請(qǐng)求 , 調(diào)用將從本地操作系統(tǒng)直接返回 。 這樣做的好處是可以將服務(wù)器的地址信息保存下來(lái) , 在后續(xù) UDP端口上發(fā)送數(shù)據(jù)時(shí) , 由套接口自動(dòng)在發(fā)送函數(shù)中填入服務(wù)器地址信息 , 而不需要由應(yīng)用程序在調(diào)用發(fā)送函數(shù)時(shí)填入 。 接受連接 ——accept(?)或 WSAAccept(?) 在服務(wù)器端通過(guò) listen(?)函數(shù)調(diào)用表示服務(wù)器進(jìn)入監(jiān)聽(tīng)客戶的連接請(qǐng)求狀態(tài) , 而在服務(wù)器端調(diào)用 accept(?)函數(shù)表示可以接收來(lái)自客戶端由 connect(?)發(fā)出的連接請(qǐng)求 , 這就好像是在通話過(guò)程中 , 被叫方聽(tīng)到電話鈴聲后提起話筒 , 然后雙方進(jìn)入通話狀態(tài) 。 1. 函數(shù)格式 在 Winsock 1中提供的 accept(?)函數(shù)的格式是: SOCKET accept( SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen )。 在 Winsock 2中提供的 accept(?)函數(shù)的擴(kuò)展格式是: SOCKET WSAAccept( SOCKET s, struct sockaddr FAR * addr, int FAR * addrlen, LPCONDITIONPROC lpfnCondition, DWORD dwCallbackData )。 該擴(kuò)展函數(shù)可根據(jù)條件函數(shù)的返回值 , 有條件地接受連接 , 同時(shí) (可選地 )創(chuàng)建和 /或加入一個(gè)套接口組 。 2. 函數(shù)參數(shù)說(shuō)明 accept(?)函數(shù)的參數(shù)說(shuō)明如下: ● ?s:標(biāo)識(shí)一個(gè)套接口描述字 , 該套接口處于監(jiān)聽(tīng)連接的狀態(tài) 。 ● ?addr:是一個(gè)地址結(jié)構(gòu)的指針 ,?用來(lái)存放發(fā)出連接請(qǐng)求的那個(gè)客戶機(jī)的 IP地址信息 。 addr參數(shù)的實(shí)際格式由套接口創(chuàng)建時(shí)所使用的地址族確定 。 ● ?addrlen:該參數(shù)指出客戶套接口地址結(jié)構(gòu)的長(zhǎng)度 。 以上三個(gè)參數(shù)在 Winsock 1和 Winsock 2擴(kuò)展版本中是完全一樣的 。 Winsock 2中后兩個(gè)參數(shù)的含義是: ● ?lpfnCondition:是一個(gè)指向條件函數(shù)進(jìn)程的指針 。這個(gè)函數(shù)是根據(jù)客戶的請(qǐng)求來(lái)調(diào)用的 , 該函數(shù)決定是否接受客戶的連接請(qǐng)求 。 它的定義如下: int CALLBACK CONDITIONPROC ( LPWSABUF lpCallerId, //指出客戶連接實(shí)體的地址 ? LPWSABUF lpCallerData, //由客戶在連接請(qǐng)求中發(fā)來(lái)的數(shù)據(jù) ? LPQOS lpSQOS, //指定一個(gè)客戶連接請(qǐng)求的服務(wù)質(zhì)量 ? LPQOS lpGQOS, //指定套接口組的服務(wù)質(zhì)量 ? LPWSABUF lpCalleeId, //指出本地連接實(shí)體的地址 ? LPWSABUF lpCalleeData, //建立連接時(shí)發(fā)給客戶的數(shù)據(jù) ? GROUP FAR * g, //GROUP是一個(gè)無(wú)符號(hào)整型量 , 確定 //一個(gè)組 DWORD dwCallbackData //返回的數(shù)據(jù) )。 ● ?dwCallbackData:作為條件函數(shù)參數(shù)返回給應(yīng)用程序的回調(diào)數(shù)據(jù) , Winsock不分析該參數(shù) 。 3. 函數(shù)返回信息 如無(wú)錯(cuò)誤發(fā)生 , 該函數(shù)就返回一個(gè)新的套接口描述符 , 它對(duì)應(yīng)于已經(jīng)接受的那個(gè)客戶機(jī)的連接 。 對(duì)該客戶機(jī)后續(xù)的所有操作 , 都使用這個(gè)新的套接口描述符 , 因此把它叫已連接套接口 (Connected Socket)描述符 。至于原來(lái)那個(gè)監(jiān)聽(tīng)套接口 , 它仍然用于接收其他客戶機(jī)發(fā)送的連接請(qǐng)求 , 而且仍處于監(jiān)聽(tīng)模式 , 因此把它叫監(jiān)聽(tīng)套接口 (Listening Socket)描述符 。 如果發(fā)生錯(cuò)誤 , 則返回 INVALID_SOCKET錯(cuò)誤 ,應(yīng)用程序可通過(guò) WSAGetLastError(?)獲取相應(yīng)錯(cuò)誤代碼 。 下面是由 WSAGetLastError(?)獲得的錯(cuò)誤代碼的說(shuō)明: ● ?WSANOTINITIALISED:在調(diào)用本 API之前應(yīng)成功調(diào)用 WSAStartup(?); ● ?WSAECONNREFUSED:根據(jù)條件函數(shù)的返回值(CF_REJECT)強(qiáng)制拒絕連接請(qǐng)求; ● ?WSAENETDOWN:套接口實(shí)現(xiàn)檢測(cè)到網(wǎng)絡(luò)子系統(tǒng)失效; ● ?WSAEFAULT: addrlen參數(shù)太小 (小于 sockaddr結(jié)構(gòu)的大小 ), 或者 lpfnCondition并不是用戶空間的一部分; ● ?WSAEINTR:通過(guò) accept(?)或WSACancelBlockingCall(?)函數(shù)取消 (阻塞 )調(diào)用; ● ?WSAEINPROGRESS:一個(gè)阻塞 Winsock調(diào)用正在進(jìn)行 。 ● ?WSAEINVAL: accept(?)或 WSAAccept(?)調(diào)用前未執(zhí)行 listen(?)調(diào)用 , 條件函數(shù)中的 g參數(shù)非法 , 條件函數(shù)的返回值非法 , 套接口處于非法狀態(tài); ● ?WSAEMFILE: accept(?)或 WSAAccept(?)調(diào)用時(shí)排隊(duì)隊(duì)列非空 , 且無(wú)可用套接口描述字; ● ?WSAENOBUFS:無(wú)可用緩沖區(qū)空間; ● ?WSAENOTSOCK:描述字不是一個(gè)套接口; ● ?WSAEOPNOTSUPP:所引用的套接口不是支持面向連接服務(wù)類(lèi)型的; ● ? WSATRY_AGAIN : 根 據(jù) 條 件 函 數(shù) 的 返 回 值(CF_DEFER), 連接請(qǐng)求被推遲; ● ?WSAEWOULDBLOCK: 套接口標(biāo)志為非阻塞 , 無(wú)連接請(qǐng)求供接受; ● ?WSAEACCES:被推遲的連接請(qǐng)求超時(shí)或撤銷(xiāo) 。 4. 函數(shù)使用說(shuō)明 該函數(shù)用于面向連接的服務(wù)器端,在 IP協(xié)議族中,只用于 TCP服務(wù)器端。 服務(wù)器程序?qū)嵗? include void main(void) { WSADATA wsaData。 SOCKET ListeningSocket。 SOCKET NewConnection。 SOCKADDR_IN ServerAddr。 SOCKADDR_IN ClientAddr。 int Port = 5150。 // Initialize Winsock version WSAStartup(MAKEWORD(2,2), amp。wsaData)。 ListeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)。 = AF_INET。 = htons(Port)。 = htonl(INADDR_ANY)。 bind(ListeningSocket, (SOCKADDR *)amp。ServerAddr, sizeof(ServerAddr))。 listen(ListeningSocket, 5)。 int ClientAddrLen = sizeof(ClientAddr)。 NewConnection = accept(ListeningSocket, (SOCKADDR *) amp。ClientAddr,amp。ClientAddrLen))。 closesocket(NewConnection)。 closesocket(ListeningSocket)。 WSACleanup()。 } 客戶機(jī)程序?qū)嵗? include void main(void) { WSADATA wsaData。 SOCKET s。 SOCKADDR_IN ServerAddr。 int Port = 5150。 WSAStartup(MAKEWORD(2,2), amp。wsaData)。 s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)。 = AF_INET。 = htons(Port)。 = i_addr()。 connect(s, (SOCKADDR *) amp。ServerAddr, sizeof(ServerAddr))。 closesocket(s)。 WSACleanup()。 } Winsock API基本函數(shù) ——數(shù)據(jù)傳輸 帶外數(shù)據(jù)的概念 有時(shí)我們可能要傳輸一些相對(duì)來(lái)說(shuō)比較重要的數(shù)據(jù) , 如果按普通數(shù)據(jù)進(jìn)行傳送 , 那么在傳輸過(guò)程中要受流量 、 擁擠等控制的影響 。 對(duì)于帶外數(shù)據(jù) , 從邏輯上看 , 好像用戶進(jìn)程使用了一個(gè)獨(dú)立的通道發(fā)送這些帶外數(shù)據(jù) , 位于連接另一端的應(yīng)用進(jìn)程可通過(guò)一個(gè)獨(dú)立的邏輯信道來(lái)接收和處理帶外數(shù)據(jù) 。 這樣對(duì)于標(biāo)記成帶外數(shù)據(jù)的數(shù)據(jù)流 , 在傳輸時(shí)就可減少傳輸系統(tǒng)對(duì)數(shù)據(jù)的干預(yù) 。 在 TCP協(xié)議中 , OOB數(shù)據(jù)由一個(gè)緊急位 (URG)和 TCP段頭中的一個(gè) 16位的緊急數(shù)據(jù)指針標(biāo)記 , 把指定的數(shù)據(jù)流當(dāng)作緊急數(shù)據(jù)來(lái)處理 。 在 Winsock中 , 要查看待發(fā)數(shù)據(jù)中是否包含緊急數(shù)據(jù) , 必須通過(guò) SIOCATMARK 選項(xiàng)調(diào)用 ioctlsocket 函數(shù)來(lái)實(shí)現(xiàn) 。Winsock提供了獲得緊急數(shù)據(jù)的方法:一是緊急數(shù)據(jù)一旦在線插入 , 它就會(huì)出現(xiàn)在普通數(shù)據(jù)流中;二是可以關(guān)閉在線插入 , 這樣 , 不連續(xù)調(diào)用接收函數(shù)就會(huì)只返回緊急數(shù)據(jù) 。 控制OOB數(shù)據(jù)行為的套接口選項(xiàng)是 SO_OOBINLINE(見(jiàn) )。 不同的系統(tǒng)對(duì)帶外數(shù)據(jù)可能有不同的解釋 , 所以用戶在編寫(xiě)應(yīng)用程序時(shí)為了增強(qiáng)程序的通用性 , 應(yīng)該盡量不用帶外數(shù)據(jù) 。 在已建立連接的套接口上發(fā)送數(shù)據(jù) ——send(?)或 WSASend(?) 在已經(jīng)建立連接的套接口上發(fā)送數(shù)據(jù) , 可以使用 send(?)或 WSASend(?)函數(shù) 。 1. 函數(shù)格式 send(?)函數(shù)在 Winsock 1中提供的格式是: int send( SOCKET s, const char FAR* buf, int len, int flags )。 在 Winsock 2中提供的 WSASend(?)函數(shù)的擴(kuò)展格式是: int WSASend( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine )。 2. 函數(shù)參數(shù)說(shuō)明 send(?)函數(shù)中 4個(gè)參數(shù)的含義是: ?s:用于標(biāo)識(shí)已建立連接的套接口描述字 。 ?buf:它是一個(gè)字符緩沖區(qū) , 內(nèi)有將要發(fā)送的數(shù)據(jù) 。 len: 即將發(fā)送的緩沖區(qū)中的字符數(shù) 。 flags:用于控制數(shù)據(jù)傳輸方式 , 它可以是 0、 宏定義MSG_DONTROUTE或 MSG_OOB。 0表示按正常方式發(fā)送數(shù)據(jù); MSG_DONTROUTE標(biāo)志說(shuō)明系統(tǒng)目標(biāo)主機(jī)就在直接連接的本地網(wǎng)絡(luò)中 , 無(wú)需路由選擇 , 但如果傳輸協(xié)議的實(shí)現(xiàn)不支持該選項(xiàng) , 則該標(biāo)志被忽略; MSG_OOB標(biāo)志指出數(shù)據(jù)是按帶外數(shù)據(jù)發(fā)送的 。 在 Winsock 2中 , WSASend(?)函數(shù)的第一個(gè)參數(shù) s和第五個(gè)參數(shù) dwFlags與 send(?)函數(shù)一樣 。 其他參數(shù)的含義如下: lpBuffers:一個(gè)指向 WSABUF結(jié)構(gòu)數(shù)組 的指針 。 每個(gè)WSABUF結(jié)構(gòu)包含緩沖區(qū)的指針和緩沖區(qū)的大小 。 在一個(gè)已建立連接的套接口上利用多緩沖來(lái)發(fā)送數(shù)據(jù)時(shí) , 順序是從第一個(gè)到最后一個(gè) WSABUF結(jié)構(gòu) 。 dwBufferCount: lpBuffers數(shù)組中 WSABUF結(jié)構(gòu)的數(shù)目 。 lpNumberOfBytesSent:如果發(fā)送操作立即完成 , 則為一個(gè)指向所發(fā)送數(shù)據(jù)字節(jié)數(shù)的指針 。
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1