資源描述:
《使用vc++的網(wǎng)絡(luò)編程總結(jié)[]》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、使用VC++的網(wǎng)絡(luò)編程總結(jié)1.套接字編程原理1.1Client/server通信模型1.2WindowsSockets規(guī)范1.3套接字1.3.1套接字定義1.3.2分類1.3.3套接字的作用1.3.4端口與地址1.3.5套接口屬性2.基本的WindowsSocketsAPI編程2.1常用函數(shù)2.2TCP實(shí)例2.3UDP實(shí)例2.4Socket通信阻塞的解決方法3.MFC下的Socket編程的類3.1CAsyncSocket類3.2CSocket類3.3WindowsSockets:帶存檔的套接字的工作方式3.4流式套接字通信的操作順序3.5使用CA
2、syncSocket類3.6從套接字類派生3.7套接字通知3.8一個(gè)使用CSocket類的網(wǎng)絡(luò)通信實(shí)例3.8.1服務(wù)器端應(yīng)用程序設(shè)計(jì)(ServerDemo)3.8.2客戶端應(yīng)用程序設(shè)計(jì)(項(xiàng)目名稱ClientDemo)4.套接字的托管實(shí)現(xiàn)4.1System::Net::Sockets命名空間4.2實(shí)例:一個(gè)新郵件檢查器1.套接字編程原理一個(gè)完整的網(wǎng)間通信進(jìn)程需要由兩個(gè)進(jìn)程組成,并且只能用同一種高層協(xié)議。也就是說,不可能通信的一端用TCP,而另一端用UDP。一個(gè)完整的網(wǎng)絡(luò)信需要一個(gè)五元組來標(biāo)識:協(xié)議、本地地址、本地端口號、遠(yuǎn)端地址、遠(yuǎn)端端口號。1.1
3、Client/server通信模型在客戶/服務(wù)器模式中我們將請求服務(wù)的一方稱為客戶(client),將提供某種服務(wù)的一方稱為服務(wù)器(server)。一個(gè)服務(wù)程序通常在一個(gè)眾所周知的地址監(jiān)聽對服務(wù)的請求,也就是說服務(wù)進(jìn)程一直處于休眠狀態(tài),直到一個(gè)客戶對這個(gè)服務(wù)的地址提出了連接請求。在這個(gè)時(shí)刻,服務(wù)程序被“驚醒”并且為客戶提供服務(wù)—對客戶的請求作出適當(dāng)?shù)姆磻?yīng)。雖然基于連接的服務(wù)是設(shè)計(jì)客戶機(jī)/服務(wù)器應(yīng)用程序時(shí)的標(biāo)準(zhǔn),但有些服務(wù)也是可以通過無連接的接口提供的。客戶機(jī)/服務(wù)器的請求/響應(yīng)過程示意圖如下所示。圖1客戶/服務(wù)器通信模型通過上面的分析,我們不難理
4、解一個(gè)一個(gè)完整的網(wǎng)絡(luò)應(yīng)用程序包括客戶端和服務(wù)器兩個(gè)部分??蛻襞c服務(wù)器進(jìn)程的作用是非對稱的,因此編碼不同。服務(wù)進(jìn)程一般是等待客戶請求而啟動的,只要系統(tǒng)運(yùn)行,該服務(wù)進(jìn)程一直存在,直到終止或強(qiáng)迫終止。1.2WindowsSockets規(guī)范WindowsSockets規(guī)范是90年代初Microsoft公司聯(lián)合其他幾家大公司共同制定的一套在Windows下的二進(jìn)制兼容網(wǎng)絡(luò)編程接口規(guī)范。它以U.C.Berkeley大學(xué)BSDUNIX中流行的Socket接口為基礎(chǔ),主要在其上擴(kuò)充了一組針對Windows的擴(kuò)展庫函數(shù),增加了符合Windows消息驅(qū)動特性的網(wǎng)絡(luò)事
5、件異步選擇機(jī)制,以使程序員能夠充分利用Windows消息驅(qū)動機(jī)制進(jìn)行編程。WindowsSockets的用途是將基礎(chǔ)網(wǎng)絡(luò)抽象出來,這樣,您不必對網(wǎng)絡(luò)非常了解,并且您的應(yīng)用程序可在任何支持套接字的網(wǎng)絡(luò)上運(yùn)行。它為應(yīng)用程序開發(fā)者定義了一套簡單統(tǒng)一的API,并讓各家網(wǎng)絡(luò)軟件供應(yīng)商共同遵守。WindowsSockets規(guī)范從90年代初的1.0版本開始,經(jīng)過不斷的完善和發(fā)展,目前已經(jīng)有了WindowsSockets2版本。值得注意的是,Microsoft的MFC庫現(xiàn)在只支持WindowsSockets1版本,不支持WindowsSockets2版本。MFC
6、提供了兩個(gè)類用以封裝WindowsSocketsAPI。一個(gè)是CAsyncSocket類,它主要是提供給那些具有一定網(wǎng)絡(luò)編程經(jīng)驗(yàn),希望同時(shí)擁有SocketAPI編程的靈活性和類庫編程便利性的開發(fā)者的。另一個(gè)是CSocket類,它由CAsyncSocket類派生,它具有更高的抽象化,致力于簡化網(wǎng)絡(luò)編程所需的操作。1.3套接字1.3.1套接字定義套接字是一個(gè)通信終結(jié)點(diǎn),它是Sockets應(yīng)用程序用來在網(wǎng)絡(luò)上發(fā)送或接收數(shù)據(jù)包的對象。套接字具有類型,與正在運(yùn)行的進(jìn)程相關(guān)聯(lián),并且可以有名稱。目前,套接字一般只與使用網(wǎng)際協(xié)議組的同一“通信域”中的其他套接字交
7、換數(shù)據(jù)。使用套接字的應(yīng)用程序間通信模型如圖2所示。1.3.2分類可用的套接字類型有以下兩種:1.3.2.1流式套接字流式套接字提供沒有記錄邊界的數(shù)據(jù)流,即字節(jié)流。字節(jié)流能確保以正確的順序無重復(fù)地被送達(dá)。1.3.2.2數(shù)據(jù)報(bào)套接字?jǐn)?shù)據(jù)報(bào)套接字支持面向記錄的數(shù)據(jù)流,但不能確保能被送達(dá),也無法確保按照發(fā)送順序或不重復(fù)?!坝行颉敝笖?shù)據(jù)包按發(fā)送的順序送達(dá)?!安恢貜?fù)”指一個(gè)特定的數(shù)據(jù)包只能獲取一次。這兩種套接字都是雙向的,是可以同時(shí)在兩個(gè)方向上(全雙工)進(jìn)行通信的數(shù)據(jù)流。注意???在某些網(wǎng)絡(luò)協(xié)議下(如XNS),流可以面向記錄,即作為記錄流而非字節(jié)流。但在更常
8、用的TCP/IP協(xié)議下,流為字節(jié)流。WindowsSockets提供與基礎(chǔ)協(xié)議無關(guān)的抽象化級別。1.3.3套接字的作用套接字的作用非常大