版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
利用MFC進(jìn)行網(wǎng)絡(luò)編程
NetworkProgrammingwithMFCProf.Xiao-jieYuan利用MFC進(jìn)行網(wǎng)絡(luò)編程
NetworkProgrammin內(nèi)容提要網(wǎng)絡(luò)基礎(chǔ)知識(shí)MFC網(wǎng)絡(luò)編程Windows套接字CAsyncSocket類(lèi)TCP協(xié)議編程聊天室客戶端聊天室服務(wù)器端程序功能演示內(nèi)容提要網(wǎng)絡(luò)基礎(chǔ)知識(shí)網(wǎng)絡(luò)基礎(chǔ)知識(shí)網(wǎng)絡(luò)基礎(chǔ)知識(shí)[//]網(wǎng)絡(luò)基礎(chǔ)知識(shí):對(duì)TCP/IP協(xié)議進(jìn)行簡(jiǎn)要介紹[//]網(wǎng)絡(luò)基礎(chǔ)知識(shí):對(duì)TCP/IP協(xié)議進(jìn)行簡(jiǎn)要介紹TCP/IP協(xié)議Windows的網(wǎng)絡(luò)通信建立在TCP/IP協(xié)議的基礎(chǔ)上TCP/IP協(xié)議族包含一系列構(gòu)成互聯(lián)網(wǎng)基礎(chǔ)結(jié)構(gòu)的網(wǎng)絡(luò)協(xié)議TCP/IP字面上代表兩個(gè)重要協(xié)議TCP: 傳輸控制協(xié)議IP: 網(wǎng)際協(xié)議網(wǎng)絡(luò)基礎(chǔ)知識(shí)TCP/IP協(xié)議Windows的網(wǎng)絡(luò)通信建立在TCP/IP協(xié)TCP/IP參考模型TCP/IP參考模型包括4層:主機(jī)至網(wǎng)絡(luò)層(Host-to-network)互聯(lián)層(Internet)傳輸層(Transport)應(yīng)用層(Application)網(wǎng)絡(luò)基礎(chǔ)知識(shí)TCP/IP參考模型TCP/IP參考模型包括4層:網(wǎng)絡(luò)基礎(chǔ)知TCP/IP模型與OSI模型應(yīng)用層表示層傳輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層會(huì)話層應(yīng)用層傳輸層互聯(lián)層主機(jī)至網(wǎng)絡(luò)層OSITCP/IP網(wǎng)絡(luò)基礎(chǔ)知識(shí)TCP/IP模型與OSI模型應(yīng)用層表示層傳輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路幾個(gè)典型的協(xié)議IP協(xié)議(互聯(lián)層)是一個(gè)路由協(xié)議,負(fù)責(zé)IP尋址、數(shù)據(jù)包的分片和重組等任務(wù)TCP協(xié)議(傳輸層)提供一對(duì)一有連接的通信服務(wù)提供連接的確認(rèn),數(shù)據(jù)包發(fā)送/接收順序的控制,出錯(cuò)重傳等機(jī)制保證數(shù)據(jù)在傳輸中的正確性HTTP協(xié)議(應(yīng)用層)用于傳送Web網(wǎng)頁(yè)文件網(wǎng)絡(luò)基礎(chǔ)知識(shí)幾個(gè)典型的協(xié)議IP協(xié)議(互聯(lián)層)網(wǎng)絡(luò)基礎(chǔ)知識(shí)數(shù)據(jù)包的封裝應(yīng)用層傳輸層互聯(lián)層主機(jī)至網(wǎng)絡(luò)層TCP/IP模型應(yīng)用程序HTTP協(xié)議TCP協(xié)議IP協(xié)議網(wǎng)卡驅(qū)動(dòng)以太網(wǎng)首部IP首部TCP首部HTTP首部用戶數(shù)據(jù)以太網(wǎng)尾部IP首部TCP首部HTTP首部用戶數(shù)據(jù)TCP首部HTTP首部用戶數(shù)據(jù)HTTP首部用戶數(shù)據(jù)用戶數(shù)據(jù)使用協(xié)議封裝的數(shù)據(jù)包網(wǎng)絡(luò)基礎(chǔ)知識(shí)數(shù)據(jù)包的封裝應(yīng)用層傳輸層互聯(lián)層主機(jī)至網(wǎng)絡(luò)層TCP/IP模型應(yīng)MFC網(wǎng)絡(luò)編程MFC網(wǎng)絡(luò)編程[//]MFC網(wǎng)絡(luò)編程:Windows套接字[//]MFC網(wǎng)絡(luò)編程:Windows套接字什么是套接字套接字是一種網(wǎng)絡(luò)編程接口英文:socket字面意思:插座、插口可以形象地將套接字理解為應(yīng)用程序與網(wǎng)絡(luò)協(xié)議之間的插口,也就是編程接口套接字在TCP/IP模型中位于傳輸層之上主要針對(duì)TCP、UDP協(xié)議進(jìn)行抽象不涉及應(yīng)用層協(xié)議Windows套接字什么是套接字套接字是一種網(wǎng)絡(luò)編程接口Windows套接字主機(jī)至網(wǎng)絡(luò)層以太網(wǎng)令牌環(huán)幀中繼ATM...互聯(lián)層IPARPICMPIGMP傳輸層TCPUDP應(yīng)用層套接字SocketsWindows套接字主機(jī)至網(wǎng)絡(luò)層以太網(wǎng)令牌環(huán)幀中繼ATM...互聯(lián)層IPARPI套接字是網(wǎng)絡(luò)通信的端點(diǎn)在網(wǎng)絡(luò)中,主機(jī)H1上的一個(gè)套接字端點(diǎn)(endpoint)可以和主機(jī)H2上的另一個(gè)套接字端點(diǎn)進(jìn)行通信IP地址和端口號(hào)可以唯一確定一個(gè)套接字Windows套接字套接字是網(wǎng)絡(luò)通信的端點(diǎn)在網(wǎng)絡(luò)中,主機(jī)H1上的一個(gè)套接字端點(diǎn)(Windows套接字套接字的概念最初是由BSDUnix操作系統(tǒng)所實(shí)現(xiàn)的Microsoft將Unix套接字中的大部分函數(shù)移植到Windows操作系統(tǒng),形成了Windows套接字Windows套接字針對(duì)Windows操作系統(tǒng)的消息驅(qū)動(dòng)機(jī)制,對(duì)原有的Unix套接字進(jìn)行了擴(kuò)展,定義了一部分新的函數(shù)Windows套接字Windows套接字套接字的概念最初是由BSDUnix操作在MFC中使用Windows套接字使用MFC提供的Windows套接字功能可以利用面向?qū)ο蟮母拍钸M(jìn)行網(wǎng)絡(luò)編程比直接調(diào)用Win32API更方便、更直觀MFC中與套接字功能有關(guān)的類(lèi)包括:CAsyncSocket類(lèi):對(duì)套接字API進(jìn)行了較低級(jí)別的封裝CSocket類(lèi):對(duì)套接字API進(jìn)行了較高級(jí)別的封裝CSocket類(lèi)是CAsyncSocket類(lèi)的派生類(lèi)Windows套接字在MFC中使用Windows套接字使用MFC提供的Windo套接字類(lèi)的層次CObjectCAsyncSocketCSocketWindows套接字套接字類(lèi)的層次CObjectCAsyncSocketCSoc[//]MFC網(wǎng)絡(luò)編程:CAsyncSocket類(lèi)[//]MFC網(wǎng)絡(luò)編程:CAsyncSocket類(lèi)CAsyncSocket類(lèi)雖然對(duì)WindowsSocketsAPI的封裝級(jí)別較低但該類(lèi)為網(wǎng)絡(luò)通信程序的開(kāi)發(fā)提供了很大的靈活性可以對(duì)一些有關(guān)網(wǎng)絡(luò)協(xié)議的具體選項(xiàng)參數(shù)進(jìn)行設(shè)定CAsyncSocket類(lèi)CAsyncSocket類(lèi)雖然對(duì)WindowsSocketCAsyncSocket類(lèi)CAsyncSocket類(lèi)只將套接字的通知消息改進(jìn)為C++語(yǔ)言中的可重載的消息處理函數(shù)沒(méi)有像CSocket那樣引入文件、文檔、串行化等其他額外的概念,這使編程變得更加簡(jiǎn)潔方便CAsyncSocket類(lèi)CAsyncSocket類(lèi)CAsyncSocket類(lèi)只將套接創(chuàng)建CAsyncSocket類(lèi)對(duì)象CAsyncSocket類(lèi)對(duì)象代表網(wǎng)絡(luò)通信端點(diǎn)采用兩步構(gòu)造法:1、定義CAsyncSocket類(lèi)對(duì)象變量
CAsyncSocketsock;2、調(diào)用Create成員函數(shù)進(jìn)一步創(chuàng)建該對(duì)象
sock.Create();CAsyncSocket類(lèi)創(chuàng)建CAsyncSocket類(lèi)對(duì)象CAsyncSocket類(lèi)套接字的種類(lèi)流套接字(streamsocket)使用TCP協(xié)議進(jìn)行通信具有TCP協(xié)議所擁有的各種特征面向連接的、可靠的數(shù)據(jù)流傳輸服務(wù)數(shù)據(jù)包不會(huì)出現(xiàn)丟失、重復(fù)、亂序等現(xiàn)象數(shù)據(jù)報(bào)套接字(datagramsocket)使用UDP協(xié)議進(jìn)行通信具有UDP協(xié)議所擁有的各種特征面向非連接的、不可靠的用戶數(shù)據(jù)報(bào)傳輸服務(wù)數(shù)據(jù)包可能出現(xiàn)丟失、重復(fù)、亂序等現(xiàn)象CAsyncSocket類(lèi)套接字的種類(lèi)流套接字(streamsocket)CAsyn指定套接字的種類(lèi)Create成員函數(shù)缺省創(chuàng)建的是流套接字SOCK_STREAM也可以根據(jù)需要指明創(chuàng)建數(shù)據(jù)報(bào)套接字SOCK_DGRAM流套接字和數(shù)據(jù)報(bào)套接字在收發(fā)數(shù)據(jù)時(shí)所調(diào)用的函數(shù)有所不同流套接字調(diào)用成員函數(shù)Send和Receive數(shù)據(jù)報(bào)套接字調(diào)用成員函數(shù)SendTo和ReceiveFromCAsyncSocket類(lèi)指定套接字的種類(lèi)Create成員函數(shù)缺省創(chuàng)建的是流套接字SO套接字的工作模式套接字在使用時(shí)分為兩種模式阻塞式非阻塞式阻塞模式也稱(chēng)為同步模式非阻塞模式也稱(chēng)為異步模式CAsyncSocket類(lèi)套接字的工作模式套接字在使用時(shí)分為兩種模式CAsyncSoc阻塞模式在阻塞模式下,套接字函數(shù)要一直等到全部操作完成后才返回例如,在建立連接時(shí)函數(shù)必須等到連接完全建立好為止調(diào)用函數(shù)的線程在這期間被掛起程序看起來(lái)好像停止了響應(yīng)CAsyncSocket類(lèi)阻塞模式在阻塞模式下,套接字函數(shù)要一直等到全部操作完成后才返阻塞模式的缺點(diǎn)以阻塞模式執(zhí)行套接字函數(shù),可能會(huì)出現(xiàn)某個(gè)函數(shù)的執(zhí)行等待很長(zhǎng)時(shí)間的情況必須考慮建立多個(gè)線程來(lái)執(zhí)行每個(gè)套接字函數(shù),程序編寫(xiě)起來(lái)比較繁瑣CAsyncSocket類(lèi)阻塞模式的缺點(diǎn)以阻塞模式執(zhí)行套接字函數(shù),可能會(huì)出現(xiàn)某個(gè)函數(shù)的非阻塞模式BSDUnix是命令行方式的系統(tǒng)套接字適合以阻塞模式工作Windows是消息驅(qū)動(dòng)的系統(tǒng)套接字適合以非阻塞模式工作Windows為所有的套接字函數(shù)提供了非阻塞模式的版本CAsyncSocket類(lèi)非阻塞模式BSDUnix是命令行方式的系統(tǒng)CAsyncSo非阻塞模式在非阻塞模式下一個(gè)套接字函數(shù)被調(diào)用后會(huì)立即返回即使它執(zhí)行的操作還沒(méi)有全部完成當(dāng)函數(shù)最終完成所執(zhí)行的操作時(shí)Windows通過(guò)發(fā)送消息的方式通知程序該模式適合Windows的消息驅(qū)動(dòng)體系CAsyncSocket類(lèi)非阻塞模式在非阻塞模式下CAsyncSocket類(lèi)非阻塞模式Windows套接字接口建議程序員使用非阻塞模式進(jìn)行網(wǎng)絡(luò)通信編程一個(gè)CAsyncSocket類(lèi)對(duì)象默認(rèn)地工作在非阻塞模式(即異步模式)下這就是CAsyncSocket(AsyncronizationSocket)這個(gè)類(lèi)名稱(chēng)的來(lái)源CAsyncSocket類(lèi)非阻塞模式Windows套接字接口建議程序員使用非阻塞模式進(jìn)綁定IP地址和端口號(hào)調(diào)用Create函數(shù)時(shí)還可以指定,套接字對(duì)象所要綁定的主機(jī)IP地址端口號(hào)Create函數(shù)根據(jù)這個(gè)IP地址和端口號(hào)去調(diào)用Bind函數(shù)以實(shí)現(xiàn)套接字的綁定CAsyncSocket類(lèi)綁定IP地址和端口號(hào)調(diào)用Create函數(shù)時(shí)還可以指定,套接通信前的準(zhǔn)備工作客戶端調(diào)用Connect函數(shù)以連接到服務(wù)器服務(wù)器端調(diào)用Listen函數(shù)監(jiān)聽(tīng)客戶的進(jìn)入服務(wù)器端調(diào)用Accept函數(shù)與客戶建立連接客戶端服務(wù)器端1Connect2Listen3AcceptCAsyncSocket類(lèi)通信前的準(zhǔn)備工作客戶端調(diào)用Connect函數(shù)以連接到服務(wù)器客收發(fā)數(shù)據(jù)發(fā)送數(shù)據(jù)接收數(shù)據(jù)流套接字SendReceive數(shù)據(jù)報(bào)套接字SendToReceiveFromCAsyncSocket類(lèi)收發(fā)數(shù)據(jù)發(fā)送數(shù)據(jù)接收數(shù)據(jù)流套接字SendReceive數(shù)據(jù)報(bào)處理通知消息CAsyncSocket類(lèi)對(duì)底層Windows套接字API的改進(jìn)調(diào)用AsyncSelect函數(shù)指定程序要處理的套接字通知消息實(shí)現(xiàn)非阻塞模式套接字的關(guān)鍵在于處理通知消息CAsyncSocket類(lèi)處理通知消息CAsyncSocket類(lèi)對(duì)底層Windows處理通知消息用于處理通知消息的虛函數(shù)OnAccept:當(dāng)一個(gè)連接請(qǐng)求到來(lái)時(shí)OnConnet:當(dāng)一個(gè)連接嘗試完成時(shí)OnClose:當(dāng)另一端套接字關(guān)閉時(shí)OnReceive:當(dāng)準(zhǔn)備好接收數(shù)據(jù)時(shí)OnSend:當(dāng)準(zhǔn)備好發(fā)送數(shù)據(jù)時(shí)CAsyncSocket類(lèi)處理通知消息用于處理通知消息的虛函數(shù)CAsyncSocke套接字句柄CAsyncSocket類(lèi)有一個(gè)成員變量m_hSocket
它代表CAsyncSocket類(lèi)對(duì)象所依附的Windows套接字句柄CAsyncSocket類(lèi)套接字句柄CAsyncSocket類(lèi)有一個(gè)成員變量CAsy錯(cuò)誤處理大多數(shù)套接字函數(shù)都可能調(diào)用失敗當(dāng)某個(gè)套接字函數(shù)調(diào)用失敗時(shí)返回錯(cuò)誤碼SOCKET_ERROR緊跟著調(diào)用函數(shù)GetLastError進(jìn)一步獲得出錯(cuò)原因碼通過(guò)查表可得到出錯(cuò)原因的描述針對(duì)各種異常情況進(jìn)行不同處理CAsyncSocket類(lèi)錯(cuò)誤處理大多數(shù)套接字函數(shù)都可能調(diào)用失敗CAsyncSockeCAsyncSocket類(lèi)成員列表成員函數(shù)描述用于構(gòu)造CAsyncSocket構(gòu)造函數(shù)Create創(chuàng)建一個(gè)套接字CAsyncSocket類(lèi)CAsyncSocket類(lèi)成員列表成員函數(shù)描述用于構(gòu)造CAsyncSocket類(lèi)成員列表成員函數(shù)描述
屬性Attach
將一個(gè)套接字句柄附屬于CAsyncSocket對(duì)象Detach從CAsyncSocket對(duì)象中分離套接字句柄FromHandle給定一個(gè)套接字句柄,返回一個(gè)指向CAsyncSocket對(duì)象的指針GetLastError得到最后一個(gè)失敗操作的錯(cuò)誤情況GetPeerName得到與套接字連接的對(duì)等套接字的地址GetSockName得到套接字的本地名稱(chēng)GetSockOpt獲取套接字的選項(xiàng)SetSockOpt
設(shè)置套接字的選項(xiàng)CAsyncSocket類(lèi)成員列表成員函數(shù)描述屬性ACAsyncSocket類(lèi)成員列表成員函數(shù)描述
操作Accept接受套接字上的一個(gè)連接AsynSelect設(shè)置套接字的通知事件Bind將一個(gè)本地地址綁定到套接字上Close關(guān)閉套接字Connect與對(duì)等套接字建立連接IOCtl控制套接字的方式Listen監(jiān)聽(tīng)進(jìn)入的連接請(qǐng)求Receive從套接字接收數(shù)據(jù)
ReceiveFrom接收一個(gè)數(shù)據(jù)報(bào)并且存儲(chǔ)源端地址
Send向一個(gè)連接的套接字發(fā)送數(shù)據(jù)SendTo向一個(gè)指定的地址發(fā)送數(shù)據(jù)ShutDown禁止在套接字上調(diào)用函數(shù)Send和ReceiveCAsyncSocket類(lèi)成員列表成員函數(shù)描述操作ACAsyncSocket類(lèi)成員列表成員函數(shù)描述
通知消息處理OnAccept通知一個(gè)監(jiān)聽(tīng)套接字,它可以通過(guò)調(diào)用Accept
函數(shù)來(lái)接收等待中的連接請(qǐng)求OnClose通知套接字與它連接的另一個(gè)套接字已經(jīng)關(guān)閉OnConnect通知一個(gè)連接中的套接字,連接的嘗試已經(jīng)完
成,是否成功可以通過(guò)錯(cuò)誤碼進(jìn)一步判斷OnOutOfBandData通知一個(gè)正在接收數(shù)據(jù)的套接字,有“帶外數(shù)據(jù)”
要被讀入,這通常是一個(gè)緊急的報(bào)文OnReceive通知套接字可以通過(guò)調(diào)用Receive函數(shù)來(lái)獲取
數(shù)據(jù)OnSend通知套接字可以通過(guò)調(diào)用Send函數(shù)來(lái)發(fā)送數(shù)據(jù)成員變量m_hSocket
代表附屬于CAsyncSocket對(duì)象的SOCKET句柄CAsyncSocket類(lèi)成員列表成員函數(shù)描述通知消息TCP協(xié)議編程TCP協(xié)議編程客戶機(jī)/服務(wù)器模型客戶機(jī)是在本地計(jì)算機(jī)上運(yùn)行的向服務(wù)器請(qǐng)求服務(wù)的程序客戶機(jī)程序是有限的由用戶啟動(dòng),當(dāng)所需服務(wù)完成時(shí)就終止客戶機(jī)程序是通信的主動(dòng)發(fā)起方使用遠(yuǎn)端計(jì)算機(jī)的IP地址與在該計(jì)算機(jī)上運(yùn)行的特定服務(wù)器程序的特定端口號(hào)建立通信連接客戶機(jī)/服務(wù)器模型客戶機(jī)是在本地計(jì)算機(jī)上運(yùn)行的向服務(wù)器請(qǐng)求服客戶機(jī)/服務(wù)器模型服務(wù)器是在遠(yuǎn)端計(jì)算機(jī)上運(yùn)行的向客戶提供服務(wù)的程序當(dāng)服務(wù)器啟動(dòng)時(shí),將“門(mén)”打開(kāi)使得從客戶發(fā)出的連接請(qǐng)求可以進(jìn)來(lái)服務(wù)器程序是無(wú)限的當(dāng)它啟動(dòng)以后就不停的運(yùn)行下去,除非出了故障服務(wù)器是通信的被動(dòng)等待方客戶機(jī)/服務(wù)器模型服務(wù)器是在遠(yuǎn)端計(jì)算機(jī)上運(yùn)行的向客戶提供服務(wù)客戶機(jī)/服務(wù)器模型綁定本地IP地址和服務(wù)端口
(Create
Bind)監(jiān)聽(tīng)進(jìn)入的連接(Listen)接收連接(Accept)收發(fā)數(shù)據(jù)(Send/Receive)創(chuàng)建套接字(Create)服務(wù)器端關(guān)閉套接字(Close)向服務(wù)器發(fā)起連接
(Connect)創(chuàng)建套接字(Create)客戶端關(guān)閉套接字(Close)收發(fā)數(shù)據(jù)(Send/Receive)客戶機(jī)/服務(wù)器模型綁定本地IP地址和服務(wù)端口
(Create簡(jiǎn)單的聊天室程序演示如何利用MFC的CAsyncSocket類(lèi)進(jìn)行網(wǎng)絡(luò)通信編程編寫(xiě)一個(gè)簡(jiǎn)單的聊天室程序使用流套接字進(jìn)行網(wǎng)絡(luò)通信是基于TCP協(xié)議的包括客戶端和服務(wù)器端兩個(gè)部分驗(yàn)證了客戶機(jī)/服務(wù)器模型簡(jiǎn)單的聊天室程序演示如何利用MFC的CAsyncSocket聊天室客戶端聊天室客戶端聊天室服務(wù)器端聊天室服務(wù)器端總結(jié)總結(jié)利用MFC進(jìn)行網(wǎng)絡(luò)編程
NetworkProgrammingwithMFCProf.Xiao-jieYuan利用MFC進(jìn)行網(wǎng)絡(luò)編程
NetworkProgrammin內(nèi)容提要網(wǎng)絡(luò)基礎(chǔ)知識(shí)MFC網(wǎng)絡(luò)編程Windows套接字CAsyncSocket類(lèi)TCP協(xié)議編程聊天室客戶端聊天室服務(wù)器端程序功能演示內(nèi)容提要網(wǎng)絡(luò)基礎(chǔ)知識(shí)網(wǎng)絡(luò)基礎(chǔ)知識(shí)網(wǎng)絡(luò)基礎(chǔ)知識(shí)[//]網(wǎng)絡(luò)基礎(chǔ)知識(shí):對(duì)TCP/IP協(xié)議進(jìn)行簡(jiǎn)要介紹[//]網(wǎng)絡(luò)基礎(chǔ)知識(shí):對(duì)TCP/IP協(xié)議進(jìn)行簡(jiǎn)要介紹TCP/IP協(xié)議Windows的網(wǎng)絡(luò)通信建立在TCP/IP協(xié)議的基礎(chǔ)上TCP/IP協(xié)議族包含一系列構(gòu)成互聯(lián)網(wǎng)基礎(chǔ)結(jié)構(gòu)的網(wǎng)絡(luò)協(xié)議TCP/IP字面上代表兩個(gè)重要協(xié)議TCP: 傳輸控制協(xié)議IP: 網(wǎng)際協(xié)議網(wǎng)絡(luò)基礎(chǔ)知識(shí)TCP/IP協(xié)議Windows的網(wǎng)絡(luò)通信建立在TCP/IP協(xié)TCP/IP參考模型TCP/IP參考模型包括4層:主機(jī)至網(wǎng)絡(luò)層(Host-to-network)互聯(lián)層(Internet)傳輸層(Transport)應(yīng)用層(Application)網(wǎng)絡(luò)基礎(chǔ)知識(shí)TCP/IP參考模型TCP/IP參考模型包括4層:網(wǎng)絡(luò)基礎(chǔ)知TCP/IP模型與OSI模型應(yīng)用層表示層傳輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層會(huì)話層應(yīng)用層傳輸層互聯(lián)層主機(jī)至網(wǎng)絡(luò)層OSITCP/IP網(wǎng)絡(luò)基礎(chǔ)知識(shí)TCP/IP模型與OSI模型應(yīng)用層表示層傳輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路幾個(gè)典型的協(xié)議IP協(xié)議(互聯(lián)層)是一個(gè)路由協(xié)議,負(fù)責(zé)IP尋址、數(shù)據(jù)包的分片和重組等任務(wù)TCP協(xié)議(傳輸層)提供一對(duì)一有連接的通信服務(wù)提供連接的確認(rèn),數(shù)據(jù)包發(fā)送/接收順序的控制,出錯(cuò)重傳等機(jī)制保證數(shù)據(jù)在傳輸中的正確性HTTP協(xié)議(應(yīng)用層)用于傳送Web網(wǎng)頁(yè)文件網(wǎng)絡(luò)基礎(chǔ)知識(shí)幾個(gè)典型的協(xié)議IP協(xié)議(互聯(lián)層)網(wǎng)絡(luò)基礎(chǔ)知識(shí)數(shù)據(jù)包的封裝應(yīng)用層傳輸層互聯(lián)層主機(jī)至網(wǎng)絡(luò)層TCP/IP模型應(yīng)用程序HTTP協(xié)議TCP協(xié)議IP協(xié)議網(wǎng)卡驅(qū)動(dòng)以太網(wǎng)首部IP首部TCP首部HTTP首部用戶數(shù)據(jù)以太網(wǎng)尾部IP首部TCP首部HTTP首部用戶數(shù)據(jù)TCP首部HTTP首部用戶數(shù)據(jù)HTTP首部用戶數(shù)據(jù)用戶數(shù)據(jù)使用協(xié)議封裝的數(shù)據(jù)包網(wǎng)絡(luò)基礎(chǔ)知識(shí)數(shù)據(jù)包的封裝應(yīng)用層傳輸層互聯(lián)層主機(jī)至網(wǎng)絡(luò)層TCP/IP模型應(yīng)MFC網(wǎng)絡(luò)編程MFC網(wǎng)絡(luò)編程[//]MFC網(wǎng)絡(luò)編程:Windows套接字[//]MFC網(wǎng)絡(luò)編程:Windows套接字什么是套接字套接字是一種網(wǎng)絡(luò)編程接口英文:socket字面意思:插座、插口可以形象地將套接字理解為應(yīng)用程序與網(wǎng)絡(luò)協(xié)議之間的插口,也就是編程接口套接字在TCP/IP模型中位于傳輸層之上主要針對(duì)TCP、UDP協(xié)議進(jìn)行抽象不涉及應(yīng)用層協(xié)議Windows套接字什么是套接字套接字是一種網(wǎng)絡(luò)編程接口Windows套接字主機(jī)至網(wǎng)絡(luò)層以太網(wǎng)令牌環(huán)幀中繼ATM...互聯(lián)層IPARPICMPIGMP傳輸層TCPUDP應(yīng)用層套接字SocketsWindows套接字主機(jī)至網(wǎng)絡(luò)層以太網(wǎng)令牌環(huán)幀中繼ATM...互聯(lián)層IPARPI套接字是網(wǎng)絡(luò)通信的端點(diǎn)在網(wǎng)絡(luò)中,主機(jī)H1上的一個(gè)套接字端點(diǎn)(endpoint)可以和主機(jī)H2上的另一個(gè)套接字端點(diǎn)進(jìn)行通信IP地址和端口號(hào)可以唯一確定一個(gè)套接字Windows套接字套接字是網(wǎng)絡(luò)通信的端點(diǎn)在網(wǎng)絡(luò)中,主機(jī)H1上的一個(gè)套接字端點(diǎn)(Windows套接字套接字的概念最初是由BSDUnix操作系統(tǒng)所實(shí)現(xiàn)的Microsoft將Unix套接字中的大部分函數(shù)移植到Windows操作系統(tǒng),形成了Windows套接字Windows套接字針對(duì)Windows操作系統(tǒng)的消息驅(qū)動(dòng)機(jī)制,對(duì)原有的Unix套接字進(jìn)行了擴(kuò)展,定義了一部分新的函數(shù)Windows套接字Windows套接字套接字的概念最初是由BSDUnix操作在MFC中使用Windows套接字使用MFC提供的Windows套接字功能可以利用面向?qū)ο蟮母拍钸M(jìn)行網(wǎng)絡(luò)編程比直接調(diào)用Win32API更方便、更直觀MFC中與套接字功能有關(guān)的類(lèi)包括:CAsyncSocket類(lèi):對(duì)套接字API進(jìn)行了較低級(jí)別的封裝CSocket類(lèi):對(duì)套接字API進(jìn)行了較高級(jí)別的封裝CSocket類(lèi)是CAsyncSocket類(lèi)的派生類(lèi)Windows套接字在MFC中使用Windows套接字使用MFC提供的Windo套接字類(lèi)的層次CObjectCAsyncSocketCSocketWindows套接字套接字類(lèi)的層次CObjectCAsyncSocketCSoc[//]MFC網(wǎng)絡(luò)編程:CAsyncSocket類(lèi)[//]MFC網(wǎng)絡(luò)編程:CAsyncSocket類(lèi)CAsyncSocket類(lèi)雖然對(duì)WindowsSocketsAPI的封裝級(jí)別較低但該類(lèi)為網(wǎng)絡(luò)通信程序的開(kāi)發(fā)提供了很大的靈活性可以對(duì)一些有關(guān)網(wǎng)絡(luò)協(xié)議的具體選項(xiàng)參數(shù)進(jìn)行設(shè)定CAsyncSocket類(lèi)CAsyncSocket類(lèi)雖然對(duì)WindowsSocketCAsyncSocket類(lèi)CAsyncSocket類(lèi)只將套接字的通知消息改進(jìn)為C++語(yǔ)言中的可重載的消息處理函數(shù)沒(méi)有像CSocket那樣引入文件、文檔、串行化等其他額外的概念,這使編程變得更加簡(jiǎn)潔方便CAsyncSocket類(lèi)CAsyncSocket類(lèi)CAsyncSocket類(lèi)只將套接創(chuàng)建CAsyncSocket類(lèi)對(duì)象CAsyncSocket類(lèi)對(duì)象代表網(wǎng)絡(luò)通信端點(diǎn)采用兩步構(gòu)造法:1、定義CAsyncSocket類(lèi)對(duì)象變量
CAsyncSocketsock;2、調(diào)用Create成員函數(shù)進(jìn)一步創(chuàng)建該對(duì)象
sock.Create();CAsyncSocket類(lèi)創(chuàng)建CAsyncSocket類(lèi)對(duì)象CAsyncSocket類(lèi)套接字的種類(lèi)流套接字(streamsocket)使用TCP協(xié)議進(jìn)行通信具有TCP協(xié)議所擁有的各種特征面向連接的、可靠的數(shù)據(jù)流傳輸服務(wù)數(shù)據(jù)包不會(huì)出現(xiàn)丟失、重復(fù)、亂序等現(xiàn)象數(shù)據(jù)報(bào)套接字(datagramsocket)使用UDP協(xié)議進(jìn)行通信具有UDP協(xié)議所擁有的各種特征面向非連接的、不可靠的用戶數(shù)據(jù)報(bào)傳輸服務(wù)數(shù)據(jù)包可能出現(xiàn)丟失、重復(fù)、亂序等現(xiàn)象CAsyncSocket類(lèi)套接字的種類(lèi)流套接字(streamsocket)CAsyn指定套接字的種類(lèi)Create成員函數(shù)缺省創(chuàng)建的是流套接字SOCK_STREAM也可以根據(jù)需要指明創(chuàng)建數(shù)據(jù)報(bào)套接字SOCK_DGRAM流套接字和數(shù)據(jù)報(bào)套接字在收發(fā)數(shù)據(jù)時(shí)所調(diào)用的函數(shù)有所不同流套接字調(diào)用成員函數(shù)Send和Receive數(shù)據(jù)報(bào)套接字調(diào)用成員函數(shù)SendTo和ReceiveFromCAsyncSocket類(lèi)指定套接字的種類(lèi)Create成員函數(shù)缺省創(chuàng)建的是流套接字SO套接字的工作模式套接字在使用時(shí)分為兩種模式阻塞式非阻塞式阻塞模式也稱(chēng)為同步模式非阻塞模式也稱(chēng)為異步模式CAsyncSocket類(lèi)套接字的工作模式套接字在使用時(shí)分為兩種模式CAsyncSoc阻塞模式在阻塞模式下,套接字函數(shù)要一直等到全部操作完成后才返回例如,在建立連接時(shí)函數(shù)必須等到連接完全建立好為止調(diào)用函數(shù)的線程在這期間被掛起程序看起來(lái)好像停止了響應(yīng)CAsyncSocket類(lèi)阻塞模式在阻塞模式下,套接字函數(shù)要一直等到全部操作完成后才返阻塞模式的缺點(diǎn)以阻塞模式執(zhí)行套接字函數(shù),可能會(huì)出現(xiàn)某個(gè)函數(shù)的執(zhí)行等待很長(zhǎng)時(shí)間的情況必須考慮建立多個(gè)線程來(lái)執(zhí)行每個(gè)套接字函數(shù),程序編寫(xiě)起來(lái)比較繁瑣CAsyncSocket類(lèi)阻塞模式的缺點(diǎn)以阻塞模式執(zhí)行套接字函數(shù),可能會(huì)出現(xiàn)某個(gè)函數(shù)的非阻塞模式BSDUnix是命令行方式的系統(tǒng)套接字適合以阻塞模式工作Windows是消息驅(qū)動(dòng)的系統(tǒng)套接字適合以非阻塞模式工作Windows為所有的套接字函數(shù)提供了非阻塞模式的版本CAsyncSocket類(lèi)非阻塞模式BSDUnix是命令行方式的系統(tǒng)CAsyncSo非阻塞模式在非阻塞模式下一個(gè)套接字函數(shù)被調(diào)用后會(huì)立即返回即使它執(zhí)行的操作還沒(méi)有全部完成當(dāng)函數(shù)最終完成所執(zhí)行的操作時(shí)Windows通過(guò)發(fā)送消息的方式通知程序該模式適合Windows的消息驅(qū)動(dòng)體系CAsyncSocket類(lèi)非阻塞模式在非阻塞模式下CAsyncSocket類(lèi)非阻塞模式Windows套接字接口建議程序員使用非阻塞模式進(jìn)行網(wǎng)絡(luò)通信編程一個(gè)CAsyncSocket類(lèi)對(duì)象默認(rèn)地工作在非阻塞模式(即異步模式)下這就是CAsyncSocket(AsyncronizationSocket)這個(gè)類(lèi)名稱(chēng)的來(lái)源CAsyncSocket類(lèi)非阻塞模式Windows套接字接口建議程序員使用非阻塞模式進(jìn)綁定IP地址和端口號(hào)調(diào)用Create函數(shù)時(shí)還可以指定,套接字對(duì)象所要綁定的主機(jī)IP地址端口號(hào)Create函數(shù)根據(jù)這個(gè)IP地址和端口號(hào)去調(diào)用Bind函數(shù)以實(shí)現(xiàn)套接字的綁定CAsyncSocket類(lèi)綁定IP地址和端口號(hào)調(diào)用Create函數(shù)時(shí)還可以指定,套接通信前的準(zhǔn)備工作客戶端調(diào)用Connect函數(shù)以連接到服務(wù)器服務(wù)器端調(diào)用Listen函數(shù)監(jiān)聽(tīng)客戶的進(jìn)入服務(wù)器端調(diào)用Accept函數(shù)與客戶建立連接客戶端服務(wù)器端1Connect2Listen3AcceptCAsyncSocket類(lèi)通信前的準(zhǔn)備工作客戶端調(diào)用Connect函數(shù)以連接到服務(wù)器客收發(fā)數(shù)據(jù)發(fā)送數(shù)據(jù)接收數(shù)據(jù)流套接字SendReceive數(shù)據(jù)報(bào)套接字SendToReceiveFromCAsyncSocket類(lèi)收發(fā)數(shù)據(jù)發(fā)送數(shù)據(jù)接收數(shù)據(jù)流套接字SendReceive數(shù)據(jù)報(bào)處理通知消息CAsyncSocket類(lèi)對(duì)底層Windows套接字API的改進(jìn)調(diào)用AsyncSelect函數(shù)指定程序要處理的套接字通知消息實(shí)現(xiàn)非阻塞模式套接字的關(guān)鍵在于處理通知消息CAsyncSocket類(lèi)處理通知消息CAsyncSocket類(lèi)對(duì)底層Windows處理通知消息用于處理通知消息的虛函數(shù)OnAccept:當(dāng)一個(gè)連接請(qǐng)求到來(lái)時(shí)OnConnet:當(dāng)一個(gè)連接嘗試完成時(shí)OnClose:當(dāng)另一端套接字關(guān)閉時(shí)OnReceive:當(dāng)準(zhǔn)備好接收數(shù)據(jù)時(shí)OnSend:當(dāng)準(zhǔn)備好發(fā)送數(shù)據(jù)時(shí)CAsyncSocket類(lèi)處理通知消息用于處理通知消息的虛函數(shù)CAsyncSocke套接字句柄CAsyncSocket類(lèi)有一個(gè)成員變量m_hSocket
它代表CAsyncSocket類(lèi)對(duì)象所依附的Windows套接字句柄CAsyncSocket類(lèi)套接字句柄CAsyncSocket類(lèi)有一個(gè)成員變量CAsy錯(cuò)誤處理大多數(shù)套接字函數(shù)都可能調(diào)用失敗當(dāng)某個(gè)套接字函數(shù)調(diào)用失敗時(shí)返回錯(cuò)誤碼SOCKET_ERROR緊跟著調(diào)用函數(shù)GetLastError進(jìn)一步獲得出錯(cuò)原因碼通過(guò)查表可得到出錯(cuò)原因的描述針對(duì)各種異常情況進(jìn)行不同處理CAsyncSocket類(lèi)錯(cuò)誤處理大多數(shù)套接字函數(shù)都可能調(diào)用失敗CAsyncSockeCAsyncSocket類(lèi)成員列表成員函數(shù)描述用于構(gòu)造CAsyncSocket構(gòu)造函數(shù)Create創(chuàng)建一個(gè)套接字CAsyncSocket類(lèi)CAsyncSocket類(lèi)成員列表成員函數(shù)描述用于構(gòu)造CAsyncSocket類(lèi)成員列表成員函數(shù)描述
屬性Attach
將一個(gè)套接字句柄附屬于CAsyncSocket對(duì)象Detach從CAsyncSocket對(duì)象中分離套接字句柄FromHandle給定一個(gè)套接字句柄,返回一個(gè)指向CAsyncSocket對(duì)象的指針GetLastError得到最后一個(gè)失敗操作的錯(cuò)誤情況GetPeerName得到與套接字連接的對(duì)等套接字的地址GetSockName得到套接字的本地名稱(chēng)GetSockOpt獲取套接字的選項(xiàng)SetSockOpt
設(shè)置套接字的選項(xiàng)CAsyncSocket類(lèi)成員列表成員函數(shù)描述屬性ACAsyncSocket類(lèi)成員列表成員函數(shù)描述
操作Accept接受套接字上的一個(gè)連接AsynSelect設(shè)置套接字的通知事件Bind將一個(gè)本地地址綁定到套接字上Close關(guān)閉套接字Conne
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- JJF 2374-2026新能源汽車(chē)電池包充放電檢測(cè)系統(tǒng)校準(zhǔn)規(guī)范
- GB/T 22390.6-2026高壓直流輸電系統(tǒng)控制與保護(hù)設(shè)備第6部分:換流站暫態(tài)故障錄波裝置
- 五選一推理題目及答案
- 養(yǎng)老院投訴處理與改進(jìn)制度
- 養(yǎng)老院老人生活設(shè)施維修人員培訓(xùn)制度
- 汽車(chē)輪胎物理題目及答案
- 辦公室資產(chǎn)盤(pán)點(diǎn)與報(bào)廢制度
- 酒店安全制度
- 物理素質(zhì)強(qiáng)化訓(xùn)練題目及答案
- 輔警的請(qǐng)示報(bào)告制度
- 2025年勞動(dòng)保障協(xié)理員三級(jí)技能試題及答案
- 企業(yè)機(jī)械設(shè)備使用管理辦法
- 20以?xún)?nèi)加減法混合口算練習(xí)題1000道(附答案)
- 全國(guó)高考體育單招考試政治模擬試卷試題及答案2025年
- 人臉識(shí)別技術(shù)在機(jī)場(chǎng)安檢的應(yīng)用措施
- 產(chǎn)品質(zhì)量檢查報(bào)告表專(zhuān)業(yè)標(biāo)準(zhǔn)模板版
- 2025年及未來(lái)5年中國(guó)心血管病醫(yī)院行業(yè)競(jìng)爭(zhēng)格局及投資戰(zhàn)略研究報(bào)告
- 晶狀體脫位課件
- 增值稅起征點(diǎn)講解課件
- 2025年智能焊接機(jī)器人產(chǎn)業(yè)發(fā)展藍(lán)皮書(shū)
- 兒科壓力性損傷健康宣教課件
評(píng)論
0/150
提交評(píng)論