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

正文內(nèi)容

tcp-ipsocket網(wǎng)絡(luò)編程(參考版)

2025-01-22 08:36本頁(yè)面
  

【正文】 。 ? 與前面的介紹相似,使用 MFC的 Winsock類(lèi)進(jìn)行操作時(shí)需要使用 、 2022/2/14 TCP/IP Socket網(wǎng)絡(luò)編程 83/83 課后習(xí)題 ? 使用 UDP數(shù)據(jù)報(bào)套接字改寫(xiě)示例程序。 } 服務(wù)器端 客戶端 2022/2/14 TCP/IP Socket網(wǎng)絡(luò)編程 82/83 高級(jí)網(wǎng)絡(luò)編程 API ? MFC編程技術(shù)定義了用于網(wǎng)絡(luò)編程的 Winsock類(lèi),類(lèi)名為 CAsyncSocket;還定義了一個(gè)派生于 CAsyncSocket的 CSocket類(lèi)。 WSACleanup()。 } else printf(recv() data from server: %s\n,buf)。 else if(iLen == SOCKET_ERROR) { printf(recv() Failed: %d\n,WSAGetLastError())。 } else { //從服務(wù)器端接收數(shù)據(jù) iLen = recv(sClient,buf,sizeof(buf),0)。ser,sizeof(ser)) == INVALID_SOCKET) { printf(connect() Failed: %d\n,WSAGetLastError())。 return 1。 //建立客戶端流式套接口 sClient = socket(AF_INET,SOCK_STREAM,0)。 = htons(iPort)。 return 1。//接收緩沖區(qū)初始化 if(WSAStartup(MAKEWORD(2,2),amp。 return 1。//接收數(shù)據(jù)的緩沖區(qū) struct sockaddr_in ser。 int iLen。 SOCKET sClient。 } 2022/2/14 TCP/IP Socket網(wǎng)絡(luò)編程 78/83 基于 TCP的客戶 /服務(wù)器-客戶端代碼 // : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。 WSACleanup()。 } closesocket(sAccept)。 } else if(iSend == 0) { break。 if(iSend == SOCKET_ERROR) { printf(send() Failed: %d\n,WSAGetLastError())。 } //輸出客戶 IP地址和端口號(hào) printf(Accepted client IP:[%s],port:[%d]\n,i_ntoa(),ntohs())。 if(sAccept == INVALID_SOCKET) { printf(accept() Failed: %d\n,WSAGetLastError())。cli,amp。 } //初始化客戶地址長(zhǎng)度參數(shù) iLen = sizeof(cli)。 } 2022/2/14 TCP/IP Socket網(wǎng)絡(luò)編程 76/83 基于 TCP的客戶 /服務(wù)器-服務(wù)器代碼 //進(jìn)入監(jiān)聽(tīng)狀態(tài) if(listen(sListen,5) == SOCKET_ERROR) { printf(lisiten() Failed: %d\n,WSAGetLastError())。ser,sizeof(ser)) == SOCKET_ERROR) { printf(bind() Failed: %d\n,WSAGetLastError())。 //htonl()把一個(gè)四字節(jié)主機(jī)序 IP地址轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)序主機(jī)地址 //使用系統(tǒng)指定的 IP地址 INADDR_ANY = htonl(INADDR_ANY)。 } //以下建立服務(wù)器端地址 //使用 IP地址族 = AF_INET。//創(chuàng)建服務(wù)器端套接口 if(sListen == INVALID_SOCKET) { printf(socket() Failed: %d\n,WSAGetLastError())。 return 1。//服務(wù)器和客戶的地址 if(WSAStartup(MAKEWORD(2,2),amp。//發(fā)送數(shù)據(jù)長(zhǎng)度 char buf[] = I am a server。 int iLen。 WSADATA wsaData。 2022/2/14 TCP/IP Socket網(wǎng)絡(luò)編程 73/83 并發(fā)服務(wù)器 W S A S t a r t u p ( )s o c k e t ( )b i n d ( )l i s t e n ( )a c c e p t ( )c l o s e s o c k e t ( )W S A C l e a n u p ( )等 待 客 戶 連 接 請(qǐng) 求 的 到 來(lái)服 務(wù) 器 端r e c v ( )s e n d ( )c l o s e s o c k e t ( )C r e a t e T h r e a d ( )派 生 線 程主 進(jìn) 程 在 a c c e p t 之 后 派生 新 線 程 , 然 后 主 進(jìn) 程繼 續(xù) l i s t e n , 處 理 新 的 連接 請(qǐng) 求 , 新 線 程 自 行 和客 戶 端 通 信2022/2/14 TCP/IP Socket網(wǎng)絡(luò)編程 74/83 基于 TCP的客戶 /服務(wù)器-服務(wù)器代碼 // : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。 ? 非阻塞方式:套接字進(jìn)行 I/O操作時(shí),無(wú)論操作成功與否,調(diào)用都會(huì)立即返回。在一個(gè)多線程的環(huán)境下, WSACleanup()函數(shù)中止了 Windows Sockets在所有線程上的操作 2022/2/14 TCP/IP Socket網(wǎng)絡(luò)編程 64/83 TCP/IP網(wǎng)絡(luò)程序框架 ? 面向連接的 C/S程序工作流程 ? 無(wú)連接的 C/S程序工作流程 2022/2/14 TCP/IP Socket網(wǎng)絡(luò)編程 65/83 面向連接的 C/S程序工作流程 (TCP) ? 服務(wù)器端工作流程 – 使用 WSAStartup()函數(shù)檢查系統(tǒng)協(xié)議棧安裝情況 – 使用 socket()函數(shù)創(chuàng)建服務(wù)器端通信套接口 – 使用 bind()函數(shù)將創(chuàng)建的套接口與服務(wù)器地址綁定 – 使用 listen()函數(shù)使服務(wù)器套接口做好接收連接請(qǐng)求準(zhǔn)備 – 使用 accept()接收來(lái)自客戶端由 connect()函數(shù)發(fā)出的連接請(qǐng)求 – 根據(jù)連接請(qǐng)求建立連接后,使用 send()函數(shù)發(fā)送數(shù)據(jù),或者使用 recv()函數(shù)接收數(shù)據(jù) – 使用 closesocket()函數(shù)關(guān)閉套接口(可以先用 shutdown()函數(shù)先關(guān)閉讀寫(xiě)通道) – 最后調(diào)用 WSACleanup()函數(shù)結(jié)束 Winsock Sockets API 2022/2/14 TCP/IP Socket網(wǎng)絡(luò)編程 66/83 面向連接的 C/S程序工作流程 (TCP) ? 客戶端程序工作流程 – 使用 WSAStartup()函數(shù)檢查系統(tǒng)協(xié)議棧安裝情況 – 使用 socket()函數(shù)創(chuàng)建客戶端套接口 – 使用 connect()函數(shù)發(fā)出也服務(wù)器建立連接的請(qǐng)求(調(diào)用前可以不用 bind()端口號(hào),由系統(tǒng)自動(dòng)完成) – 連接建立后使用 send()函數(shù)發(fā)送數(shù)據(jù),或使用 recv()函數(shù)接收數(shù)據(jù) – 使用 closesocet()函數(shù)關(guān)閉套接口 – 最后調(diào)用 WSACleanup()函數(shù),結(jié)束 Winsock Sockets API 2022/2/14 TCP/IP Socket網(wǎng)絡(luò)編程 67/83 面向連接的 C/S程序工作流程 (TCP) ? 服務(wù)器與客戶端五元組的建立 五元組 協(xié)議 本地 IP地址,本地端口號(hào) 遠(yuǎn)程 IP地址,遠(yuǎn)程端口號(hào) 服務(wù)器端五元組 由 socket()確定 由服務(wù)器端調(diào)用 bind()時(shí)確定 由 accept()確定 客戶端五元組 由 socket()確定 由客戶端的 bind()調(diào)用確定。 int WSACleanup(void)。 ? 參數(shù) s表示即將被關(guān)閉的套接口 2022/2/14 TCP/IP Socket網(wǎng)絡(luò)編程 61/83 IP地址轉(zhuǎn)換函數(shù) ? char * i_ntoa ( struct in_addr in ) in為傳入?yún)?shù),表示一個(gè)結(jié)構(gòu)型的 IP主機(jī)地址,該函數(shù)將一個(gè) 32位數(shù)字表示的 IP地址轉(zhuǎn)換成點(diǎn)分十進(jìn)制 IP地址字符串 ? unsigned long i_addr(const char FAR * cp) 該函數(shù)將一個(gè)點(diǎn)分十進(jìn)制 IP地址字符串轉(zhuǎn)換成 32位數(shù)字表示的 IP地址。 ? 一個(gè)套接口不再使用時(shí)一定要關(guān)閉這個(gè)套接口,以釋放與該套接口關(guān)聯(lián)的所有資源,包括等候處理的數(shù)據(jù)。在套接口發(fā)送緩沖區(qū)中的數(shù)據(jù)都被發(fā)送出去,得到接收端確認(rèn)之后,就生成一個(gè) FIN包關(guān)閉連接。 2022/2/14 TCP/IP Socket網(wǎng)絡(luò)編程 59/83 shutdown()函數(shù)參數(shù)說(shuō)明 ? s標(biāo)識(shí)一個(gè)套接口的描述字 ? how是一個(gè)標(biāo)志,用于描述禁止哪些操作,取值如下表所示 關(guān)閉方式 參數(shù)值 說(shuō) 明 SD_RECEIVE 0 表示不允許再調(diào)用接收函數(shù),它關(guān)閉讀通道。當(dāng)然在有連接的情況下很少使用該函數(shù) 2022/2/14 TCP/IP Socket網(wǎng)絡(luò)編程 58/83 關(guān)閉讀寫(xiě)通道 shutdown()函數(shù) ? 在一個(gè)套接口上的讀寫(xiě)操作完成后,應(yīng)該首先使用 shutdown()函數(shù)來(lái)關(guān)閉套接口的讀通道、寫(xiě)通道或讀寫(xiě)通道,這樣做的好處是當(dāng)雙方不再有數(shù)據(jù)要發(fā)送或接收時(shí),可以通知對(duì)方,以防止數(shù)據(jù)丟失,并能“優(yōu)雅”地關(guān)閉連接。 2022/2/14 TCP/IP Socket網(wǎng)絡(luò)編程 57/83 sendto()函數(shù)參數(shù)說(shuō)明 ? s本機(jī)的套接字 ? buf待發(fā)送數(shù)據(jù)的緩沖區(qū) ? len指明 buf緩沖區(qū)中要發(fā)送的數(shù)據(jù)長(zhǎng)度 ? flags調(diào)用方式標(biāo)志位,同 send()中的 flags ? to可選指針,
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1