c網(wǎng)絡(luò)編程實(shí)例_第1頁
c網(wǎng)絡(luò)編程實(shí)例_第2頁
c網(wǎng)絡(luò)編程實(shí)例_第3頁
c網(wǎng)絡(luò)編程實(shí)例_第4頁
c網(wǎng)絡(luò)編程實(shí)例_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第1章 Visual C+網(wǎng)絡(luò)編程概述Visual C+(后面簡寫為VC)網(wǎng)絡(luò)編程是指用戶使用MFC類庫(微軟基礎(chǔ)類庫)在VC編譯器中編寫程序,以實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用。用戶通過VC編程實(shí)現(xiàn)的網(wǎng)絡(luò)軟件可以在網(wǎng)絡(luò)中不同的計(jì)算機(jī)之間互傳文件、圖像等信息。本章將向用戶介紹基于Windows操作系統(tǒng)的網(wǎng)絡(luò)編程基礎(chǔ)知識(shí),其開發(fā)環(huán)境是VC。在VC編譯器中,使用Windows Socket進(jìn)行網(wǎng)絡(luò)程序開發(fā)是網(wǎng)絡(luò)編程中非常重要的一部分。1.1 網(wǎng)絡(luò)基礎(chǔ)知識(shí) 如果用戶要進(jìn)行VC網(wǎng)絡(luò)編程,則必須首先了解計(jì)算機(jī)網(wǎng)絡(luò)通信的基本框架和工作原理。在兩臺(tái)或多臺(tái)計(jì)算機(jī)之間進(jìn)行網(wǎng)絡(luò)通信時(shí),其通信的雙方還必須遵循相同的通信原則和數(shù)據(jù)格式。

2、本節(jié)將向用戶介紹OSI七層網(wǎng)絡(luò)模型、TCP/IP協(xié)議以及C/S編程模型。 OSI七層網(wǎng)絡(luò)模型OSI網(wǎng)絡(luò)模型是一個(gè)開放式系統(tǒng)互聯(lián)的參考模型。通過這個(gè)參考模型,用戶可以非常直觀地了解網(wǎng)絡(luò)通信的基本過程和原理。OSI參考模型如圖1.1所示。圖1.1 OSI七層網(wǎng)絡(luò)模型用戶從OSI網(wǎng)絡(luò)模型可以很直觀地看到,網(wǎng)絡(luò)數(shù)據(jù)從發(fā)送方到達(dá)接收方的過程中,數(shù)據(jù)的流向以及經(jīng)過的通信層和相應(yīng)的通信協(xié)議。事實(shí)上在網(wǎng)絡(luò)通信的發(fā)送端,其通信數(shù)據(jù)每到一個(gè)通信層,都會(huì)被該層協(xié)議在數(shù)據(jù)中添加一個(gè)包頭數(shù)據(jù)。而在接收方恰好相反,數(shù)據(jù)通過每一層時(shí)都會(huì)被該層協(xié)議剝?nèi)ハ鄳?yīng)的包頭數(shù)據(jù)。用戶也可以這樣理解,即網(wǎng)絡(luò)模型中的各層都是對(duì)等通信。在OS

3、I七層網(wǎng)絡(luò)模型中,各個(gè)網(wǎng)絡(luò)層都具有各自的功能,如表1.1所示。表1.1 各網(wǎng)絡(luò)層的功能協(xié) 議 層 名功 能 概 述物理硬件層表示計(jì)算機(jī)網(wǎng)絡(luò)中的物理設(shè)備。常見的有計(jì)算機(jī)網(wǎng)卡等數(shù)據(jù)鏈路層將傳輸數(shù)據(jù)進(jìn)行壓縮與加壓縮網(wǎng)絡(luò)層將傳輸數(shù)據(jù)進(jìn)行網(wǎng)絡(luò)傳輸數(shù)據(jù)傳輸層進(jìn)行信息的網(wǎng)絡(luò)傳輸會(huì)話層建立物理網(wǎng)絡(luò)的連接表示層將傳輸數(shù)據(jù)以某種格式進(jìn)行表示應(yīng)用層應(yīng)用程序接口%注意:在表1.1中列出了OSI七層網(wǎng)絡(luò)模型中各層的基本功能概述。用戶根據(jù)這些基本的功能概述會(huì)對(duì)該網(wǎng)絡(luò)模型有一個(gè)比較全面的認(rèn)識(shí)。 TCP/IP協(xié)議TCP/IP協(xié)議實(shí)際上是一個(gè)協(xié)議簇,其包括了很多協(xié)議。例如,F(xiàn)TP(文本傳輸協(xié)議)、SMTP(郵件傳輸協(xié)議)等應(yīng)用

4、層協(xié)議。TCP/IP協(xié)議的網(wǎng)絡(luò)模型只有4層,包括數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、數(shù)據(jù)傳輸層和應(yīng)用層,如圖1.2所示。圖1.2 TCP/IP網(wǎng)絡(luò)協(xié)議模型在TCP/IP網(wǎng)絡(luò)編程模型中,各層的功能如表1.2所示。表1.2 TCP/IP網(wǎng)絡(luò)協(xié)議各層功能協(xié) 議 層 名功 能 概 述數(shù)據(jù)鏈路層網(wǎng)卡等網(wǎng)絡(luò)硬件設(shè)備以及驅(qū)動(dòng)程序網(wǎng)絡(luò)層IP協(xié)議等互聯(lián)協(xié)議數(shù)據(jù)傳輸層為應(yīng)用程序提供通信方法,通常為TCP、UDP協(xié)議應(yīng)用層負(fù)責(zé)處理應(yīng)用程序的實(shí)際用于層協(xié)議在數(shù)據(jù)傳輸層中,包括了TCP和UDP協(xié)議。其中,TCP協(xié)議是基于面向連接的可靠的通信協(xié)議。其具有重發(fā)機(jī)制,即當(dāng)數(shù)據(jù)被破壞或者丟失時(shí),發(fā)送方將重發(fā)該數(shù)據(jù)。而UDP協(xié)議是基于用戶數(shù)據(jù)報(bào)

5、協(xié)議,屬于不可靠連接通信的協(xié)議。例如,當(dāng)用戶使用UDP協(xié)議發(fā)送一條消息時(shí),并不知道該消息是否已經(jīng)到達(dá)接收方,或者在傳輸過程中數(shù)據(jù)已經(jīng)丟失。但是在即時(shí)通信中,UDP協(xié)議在對(duì)一些對(duì)時(shí)間要求較高的網(wǎng)絡(luò)數(shù)據(jù)傳輸方面有著重要的 作用。 C/S編程模型C/S編程模型是基于可靠連接的通信模型。在通信的雙方必須使用各自的IP地址以及端口進(jìn)行通信。否則,通信過程將無法實(shí)現(xiàn)。通常情況下,當(dāng)用戶使用C/S模型進(jìn)行通信時(shí),其通信的任意一方稱為客戶端,則另一方稱為服務(wù)器端。服務(wù)器端等待客戶端連接請(qǐng)求的到來,這個(gè)過程稱為監(jiān)聽過程。通常,服務(wù)器監(jiān)聽功能是在特定的IP地址和端口上進(jìn)行。然后,客戶端向服務(wù)器發(fā)出連接請(qǐng)求,服務(wù)器

6、響應(yīng)該請(qǐng)求則連接成功。否則,客戶端的連接請(qǐng)求失敗。C/S編程模型如圖1.3所示。圖1.3 C/S編程模型由于客戶端連接服務(wù)器時(shí),需要使用服務(wù)器的IP地址和監(jiān)聽端口號(hào)才能完成連接。所以,服務(wù)器的IP地址和端口必須是固定的。在這里,向用戶介紹部分協(xié)議所使用的端口號(hào)碼。例如,HTTP協(xié)議(網(wǎng)頁瀏覽服務(wù))所使用的端口號(hào)為80,F(xiàn)TP協(xié)議(文本傳輸)所使用的端口號(hào)是21。%注意:用戶在實(shí)際編程中,通信雙方的連接以及數(shù)據(jù)通信均是基于Socket(套接字)進(jìn)行的。1.2 網(wǎng)絡(luò)編程基礎(chǔ)網(wǎng)絡(luò)應(yīng)用程序可以使用MFC中封裝的套接字類進(jìn)行編程,也可以使用Windows API函數(shù)進(jìn)行程序開發(fā)。相比較而言,MFC網(wǎng)絡(luò)編

7、程較簡單一點(diǎn),用戶使用也非常方便。但是,使用MFC相關(guān)類編程會(huì)使用戶對(duì)網(wǎng)絡(luò)通信中的基本原理沒有清晰的認(rèn)識(shí)。而使用Windows API函數(shù)則恰好相反,可以使用戶熟悉網(wǎng)絡(luò)通信的基本原理。 Sockets套接字用戶在Windows中編寫網(wǎng)絡(luò)通信程序時(shí),需要使用Windows Sockets(Windows套接字)。與Windows套接字相關(guān)的API函數(shù)稱為Winsock函數(shù)。在網(wǎng)絡(luò)通信的雙方,均有各自的套接字,并且該套接字與特定的IP地址和端口號(hào)相關(guān)聯(lián)。通常,套接字主要有兩種類型,分別是流式套接字(SOCK_STREAM)和數(shù)據(jù)報(bào)套接字(SOCK_DGRAM)。其中,流式套接字是專門用于使用TCP

8、協(xié)議通信的應(yīng)用程序中,而數(shù)據(jù)報(bào)套接字則是專門用于使用UDP協(xié)議進(jìn)行通信的應(yīng)用程序中。 網(wǎng)絡(luò)字節(jié)順序網(wǎng)絡(luò)字節(jié)順序是指TCP/IP協(xié)議中規(guī)定的數(shù)據(jù)傳輸使用格式,與之相對(duì)的字節(jié)順序是主機(jī)字節(jié)順序。網(wǎng)絡(luò)字節(jié)順序表示首先將數(shù)據(jù)中最重要的字節(jié)進(jìn)行存儲(chǔ)。例如,當(dāng)數(shù)據(jù)0x358457使用網(wǎng)絡(luò)字節(jié)順序進(jìn)行存儲(chǔ)時(shí),該值在內(nèi)存中的存放順序?qū)⑹?x35、0x84、0x57。因?yàn)橥ㄐ艛?shù)據(jù)可能會(huì)在不同的機(jī)器之間進(jìn)行傳輸,所以通信數(shù)據(jù)必須以相同的格式進(jìn)行整理。只有經(jīng)過格式處理的通信數(shù)據(jù),才能在不同的機(jī)器之間進(jìn)行傳輸。在Winsock中,已經(jīng)提供了相關(guān)的函數(shù)處理網(wǎng)絡(luò)字節(jié)順序的相關(guān)問題,這些知識(shí)將在第2章中具體講解。1.3 W

9、indows Sockets介紹在MFC類庫中,幾乎封裝了Windows Sockets的全部功能。在本節(jié)中,將向用戶介紹兩個(gè)主要的套接字相關(guān)類,分別是CAsyncSocket類和CSocket類。 CAsyncSocket類在微軟基礎(chǔ)類庫中,CAsyncSocket類封裝了異步套接字的基本功能。用戶使用該類進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)牟襟E如下:(1)調(diào)用構(gòu)造函數(shù)創(chuàng)建套接字對(duì)象。(2)如果創(chuàng)建服務(wù)器端套接字,則調(diào)用函數(shù)Bind()綁定本地IP和端口,然后調(diào)用函數(shù)Listen()監(jiān)聽客戶端的請(qǐng)求。如果請(qǐng)求到來,則調(diào)用函數(shù)Accept()響應(yīng)該請(qǐng)求。如果創(chuàng)建客戶端套接字,則直接調(diào)用函數(shù)Connect()連接

10、服務(wù)器即可。(3)調(diào)用Send()等功能函數(shù)進(jìn)行數(shù)據(jù)傳輸與處理。(4)關(guān)閉或銷毀套接字對(duì)象。%注意:在MFC中,所有類中均有一個(gè)變量m_hWnd表示該類的實(shí)例句柄。 CSocket類CSocket類派生于CAsyncSocket類。該類不但具有CAsyncSocket類的基本功能,還具有串行化功能。用戶在實(shí)際編程中,通過將CSocket類與CSocketFile類和CArchive類一起使用,能夠很好地管理數(shù)據(jù)以及發(fā)送數(shù)據(jù)。用戶使用該類進(jìn)行網(wǎng)絡(luò)編程的步驟如下: (1)創(chuàng)建CSocket類對(duì)象。(2)如果創(chuàng)建服務(wù)器端套接字,則調(diào)用函數(shù)Bind()綁定本地IP和端口,然后調(diào)用函數(shù)Listen()監(jiān)聽客戶端的請(qǐng)求。如果請(qǐng)求到來,則調(diào)用函數(shù)Accept()響應(yīng)該請(qǐng)求。如果創(chuàng)建客戶端套接字,則直接調(diào)用函數(shù)Connect()連接服務(wù)器即可。(3)創(chuàng)建與CSocket類對(duì)象相關(guān)聯(lián)的CSocketFile類對(duì)象。(4)創(chuàng)建與CSocketFile類相關(guān)聯(lián)的CArchive對(duì)象。(5)使用CArchive類對(duì)象在客戶端和服務(wù)器之間進(jìn)行數(shù)據(jù)傳輸。(6)關(guān)閉或銷毀CSocket類、CSocketFile類和CArchive類的3個(gè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論