




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、學(xué)科分類號(hào):08本科生畢業(yè)設(shè)計(jì)題目(中文):基于VisualC+6.0的點(diǎn)對(duì)點(diǎn)文件傳輸實(shí)現(xiàn)(英文):DesignandRealizationofPoint-to-PointFilesTransferwithVisualC+6.0學(xué)生姓名:學(xué)號(hào)系部:專業(yè)年級(jí):2指導(dǎo)教師:職稱:摘要I關(guān)鍵詞IAbstractIKeywordsI第一章緒論11.1 選題背景11.2 文件傳輸?shù)闹饕绞?1.3 課題研究意義3第二章TCP/IP技術(shù)與C/S模式418.1.4 TCP/IP技術(shù)418 TCP/IP體系結(jié)構(gòu)418 TCP/IP特點(diǎn)518 TCP/IP傳送文件機(jī)制62.3客戶機(jī)/服務(wù)器模式7第三章Winso
2、ck網(wǎng)絡(luò)程序設(shè)計(jì)技術(shù)81 Winsock簡(jiǎn)介81 Winsock通信機(jī)制91 Winsock編程模型111.5 建立一個(gè)Socket111.5 配置一個(gè)Socket111.5 使用Socket12第四章系統(tǒng)方案設(shè)計(jì)141 /S結(jié)構(gòu)與C/S結(jié)構(gòu)的選擇141.5 B/S結(jié)構(gòu)與C/S結(jié)構(gòu)141.5 C/S模式的采用151 件傳輸協(xié)議的比較161.6 期文件傳輸協(xié)議的研究比較161.6 HTTP協(xié)議傳輸文件的方式171.6 FTP文件傳輸協(xié)議的研究181 立新的利用套接字方式的通信協(xié)議18第五章系統(tǒng)詳細(xì)設(shè)計(jì)20系統(tǒng)總體設(shè)計(jì)20系統(tǒng)功能模塊設(shè)計(jì)21服務(wù)器模塊21客戶端模塊25界面顯示模塊26致謝28參考
3、文獻(xiàn)29基于VisualC+6.0的點(diǎn)對(duì)點(diǎn)文件傳輸實(shí)現(xiàn)摘要:近年來(lái),隨著Internet的發(fā)展和普及,人們對(duì)網(wǎng)絡(luò)傳輸?shù)男枨罅吭絹?lái)越大,遠(yuǎn)程教育、網(wǎng)絡(luò)會(huì)議等眾多新興軟件的產(chǎn)生,對(duì)大文件的傳輸問(wèn)題提出了挑戰(zhàn)。傳統(tǒng)的大文件傳輸通常在客戶端建立一個(gè)較大的Buffer緩沖區(qū),這樣不僅會(huì)大量占用系統(tǒng)資源,而且傳輸?shù)乃俣仁志徛?,不能?shí)時(shí)地顯示傳輸進(jìn)度。由于傳輸?shù)臅r(shí)間比較長(zhǎng),期間發(fā)生中斷或計(jì)算機(jī)重啟等意外的可能性非常高。本文件傳輸系統(tǒng)的設(shè)計(jì)選用VC+6.0為開(kāi)發(fā)工具,以C/S模式通過(guò)建立Socket連接后實(shí)現(xiàn)局域網(wǎng)快速,準(zhǔn)確,安全的點(diǎn)對(duì)點(diǎn)文件傳輸功能。本系統(tǒng)能夠促進(jìn)局域網(wǎng)內(nèi)用戶之間的文件資源共享,滿足主機(jī)之
4、間信息交流,確保文件傳輸安全性,有效地提高工作效率。關(guān)鍵詞:套接字,網(wǎng)絡(luò)編程,C/S模式,TCP/IPDesignandRealizationofPoint-to-PointFilesTransferwithVisualC+6.0Abstractt:Inrecentyears,withthedevelopmentandpopularizationofInternet,thereisagrowingdemandfornetworktransmission.Distanteducation,webconference,andmanyothernewsoftwaresarecomeintobeing
5、.Itgivesthelargechallengestotransmissionoflargefilesontheissues.Traditionalfilestransferisusuallyestablishalargerbufferintheclient,sothatitwilloccupymanysystemresourcesandresultveryslowspeedoffilestransfer,soitalsocannotbedisplayedinthereal-timetransmissionprogress.Transferfilesforlongtimemaycauseso
6、meaccidentssuchasinterruptingorrestartingthecomputer.ThesystemwiththeVisualC+6.0establishsasocketconnectioninlocalareanetworkbasedonC/Smodeforafast,exactandsafewaytotansferfilesofpoint-to-point.ThesystemcancontributetoshareresourcesintheLAN,meetthedemandofexchangingtheinformationbetweenthehost,makes
7、ureitissafetotransferfiles,improvetheworkefficiencyineffect.Keywords:Socket;NetworkProgramming;C/SModel;TCP/IP第一章緒論選題背景在這個(gè)信息化時(shí)代,計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展影響了幾乎包括政治、文化、生活、經(jīng)濟(jì)在內(nèi)的每一個(gè)角落,推動(dòng)了人類社會(huì)向信息化社會(huì)的逐步轉(zhuǎn)變;同時(shí)我們也應(yīng)該清醒地認(rèn)識(shí)到文件傳輸?shù)膯?wèn)題是計(jì)算機(jī)網(wǎng)絡(luò)發(fā)展過(guò)程中的一個(gè)不容忽視的問(wèn)題。在如今擁塞的網(wǎng)絡(luò)上,各種數(shù)據(jù)在爭(zhēng)奪著網(wǎng)絡(luò)資源,如何使傳輸?shù)奈募涌煽康牡竭_(dá)目的地,同時(shí)如何友好的解決文件分類分組高效傳輸?shù)葐?wèn)題都是需要有待提高
8、和完善的地方。文件傳輸?shù)闹饕绞皆诰W(wǎng)絡(luò)環(huán)境下,文件傳輸方式主要有:文件傳輸協(xié)議方式(FTP)、遠(yuǎn)程拷貝方式(RCP)、套接字方式(Socket),利用HTTP協(xié)議傳輸方式,利用標(biāo)準(zhǔn)XMODEM協(xié)議傳輸方式,利用XMODEMCRC協(xié)議傳輸方式,利用XMODEM1K協(xié)議傳輸方式,利用YMODEMODME批傳輸協(xié)議傳輸方式,利用YMODEMG協(xié)議傳輸方式,利用ZMODEM批量傳輸協(xié)議傳輸方式,利用Kemti協(xié)議傳輸方式1。傳統(tǒng)方式下,利用FTP協(xié)議進(jìn)行文件傳輸最為普遍,這種方式的優(yōu)點(diǎn)是適用面廣、使用簡(jiǎn)單、不需要用戶編制額外的應(yīng)用軟件(一般集成在操作系統(tǒng)或者網(wǎng)絡(luò)協(xié)議中);其缺點(diǎn)是在廣域網(wǎng)上傳輸大文件時(shí)
9、可靠性較低、不支持?jǐn)帱c(diǎn)續(xù)傳,因而對(duì)大文件和傳輸精度要求很高的應(yīng)用不適合。下面是FTP協(xié)議的發(fā)展歷程:1971年,第一個(gè)FTP的RFC(RFC114)由A.K.Bhushna在1971年提出,同時(shí)由MIT與Harvard實(shí)驗(yàn)實(shí)現(xiàn)。1972年,RFC172提供了主機(jī)間文件傳輸?shù)囊粋€(gè)用戶級(jí)協(xié)議。1973年2月,在長(zhǎng)期討論(RFC265,RFC294,RFC354,RFC385,RFC430)后,出現(xiàn)了一個(gè)官方文檔RFC4541973年8月,出現(xiàn)了一個(gè)修訂后的新官方文檔RFC542。確立了FTP的功能、目標(biāo)和基本模型;當(dāng)時(shí)數(shù)據(jù)傳輸協(xié)議采用NCP。1980年,由于底層協(xié)議從NCP改變?yōu)門(mén)CP,RFC76
10、5定義采用TCP的FTP。1985年,一個(gè)作用持續(xù)至今的官方文檔RFC959(STD9)出臺(tái)。文件傳送協(xié)議FTP(FileTransferProtoeol)是Internet文件傳送的基礎(chǔ),通過(guò)該協(xié)議,用戶可以從一個(gè)Internet主機(jī)向另一個(gè)Internet主機(jī)拷貝文件。FTP曾經(jīng)是Internet中的一種重要的交流形式。目前,我們常常用它來(lái)從遠(yuǎn)程主機(jī)中拷貝所需的各類軟件,與大多數(shù)Internet服務(wù)一樣,F(xiàn)TP也是一個(gè)客戶機(jī)及服務(wù)器系統(tǒng)。用戶通過(guò)一個(gè)支持FTP協(xié)議的客戶機(jī)程序,連接到在遠(yuǎn)程主機(jī)上的FTP服務(wù)器程序。用戶通過(guò)客戶機(jī)程序向服務(wù)器程序發(fā)出命令,服務(wù)器程序執(zhí)行用戶所發(fā)出的命令,并將
11、執(zhí)行的結(jié)果返回到客戶機(jī)。利用TCP或者UDP提供的套接字直接在服務(wù)器和客戶機(jī)之間進(jìn)行文件傳輸?shù)膬?yōu)點(diǎn)是實(shí)現(xiàn)過(guò)程可以由應(yīng)用程序開(kāi)發(fā)者直接控制,因而靈活性很高,缺點(diǎn)是編程復(fù)雜,可靠性完全依賴于應(yīng)用程序開(kāi)發(fā)者。標(biāo)準(zhǔn)XMODEM協(xié)議是最早開(kāi)發(fā)的文件傳輸協(xié)議,因而也是最常用的。由于它歷史悠久并被普遍采用,幾乎所有的遠(yuǎn)程系統(tǒng)都支持標(biāo)準(zhǔn)XMODEM協(xié)議,事實(shí)上,很多協(xié)議都是在它的基礎(chǔ)上發(fā)展起來(lái)的,標(biāo)準(zhǔn)XMODEM協(xié)議用128字節(jié)/塊來(lái)發(fā)送數(shù)據(jù)。XMODEMCRC協(xié)議與標(biāo)準(zhǔn)XMODEM協(xié)議相同,但包括CRC(循環(huán)冗余校驗(yàn)),以進(jìn)一步降低檢測(cè)不到的錯(cuò)誤的概率;除了數(shù)據(jù)是以更大的速率1024字節(jié)/塊外,XMODEM
12、1K與XMODEMCRC完全一樣,增大數(shù)據(jù)塊可以提高總的傳輸速度,因?yàn)閭鬏攭K大則需要的應(yīng)答塊數(shù)就少。YODEM批傳輸協(xié)議和ZMODEM協(xié)議支持文件的分組傳輸,而YODEMG協(xié)議具有校正功能。Kemrti協(xié)議可以做許多調(diào)整,具有許多特性,因而常被選作舊M大型機(jī)或者DECVAX系統(tǒng)的協(xié)議。在文件(信息)的最優(yōu)傳輸設(shè)計(jì)問(wèn)題中,減少文件的傳輸時(shí)間(接通時(shí)間),對(duì)提高工作效率有重要的現(xiàn)實(shí)意義。目前常用于解決文件最優(yōu)傳輸問(wèn)題的優(yōu)化方法主要是尋找關(guān)鍵路徑方法和貪婪算法,兩類方法都是基于運(yùn)籌學(xué)方法給出的,計(jì)算規(guī)模大,很難得到問(wèn)題的量化結(jié)果,所以文件傳輸?shù)倪z傳優(yōu)化算法隨之被提了出來(lái)。算法給出了文件傳輸問(wèn)題的邊著
13、色模型。遺傳算法是一種借鑒生物界自然選擇和進(jìn)化機(jī)制發(fā)展起來(lái)的高度并行的、隨機(jī)搜索算法,具有自適應(yīng)性,為了求解文件傳輸問(wèn)題,在引入一種新的自適應(yīng)性的交換概率和變異概率的基礎(chǔ)上,提出了一種面向求解文件傳輸問(wèn)題的遺傳算法。隨著文件(信息)的最優(yōu)傳輸設(shè)計(jì)方案設(shè)計(jì)的不斷進(jìn)步與完善,網(wǎng)絡(luò)中的中轉(zhuǎn)設(shè)備,例如路由器就能更有效率的選擇下一步的最優(yōu)傳輸路徑,以能夠節(jié)省盡可能多的時(shí)間,再加上文件傳輸協(xié)議的輔助作用,那么將會(huì)極大的提高傳輸雙方的工作效率。課題研究意義本課題的價(jià)值體現(xiàn)在通過(guò)本課題的研究,對(duì)專用的文件分組上傳系統(tǒng)采用了一套比較行之有效的方案,包括采用最新的加密標(biāo)準(zhǔn)來(lái)保證文件傳輸?shù)陌踩?,摒棄FTP傳輸系統(tǒng)分
14、組上傳文件時(shí)直接操作服務(wù)器目錄的不安全方式,將文件分組功能轉(zhuǎn)移到客戶端從而提高了系統(tǒng)的安全性,為了滿足特定需求,建立了應(yīng)用層上專用的通信協(xié)議從而極大的方便了客戶端與服務(wù)器端的通信,采用了最新的代理協(xié)議Socket來(lái)實(shí)現(xiàn)文件的透明傳輸?shù)鹊龋@個(gè)方案可以為其它專用傳輸系統(tǒng)的研究開(kāi)發(fā)提供參考,在應(yīng)用價(jià)值上則能夠方便用戶的操作,提高工作效率。第二章TCP/IP技術(shù)與C/S模式TCP/IP技術(shù)TCP/IPMTransmissionControlProtocol/InternetProtocol的簡(jiǎn)寫(xiě),中文譯名為傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議2,是當(dāng)今世界上最廣而不基于任何特定硬件平臺(tái)的網(wǎng)絡(luò)通信協(xié)議。采用TCP
15、/IP可以解決異種機(jī)聯(lián)網(wǎng)和異種網(wǎng)互連的問(wèn)題,并可以訪問(wèn)當(dāng)今世界上最有影響力的Internet網(wǎng)。TCP/IP協(xié)議的基本思想是通過(guò)網(wǎng)間連接層將各種不同的網(wǎng)絡(luò)連接起來(lái),在各個(gè)網(wǎng)絡(luò)的底層協(xié)議之上構(gòu)造一個(gè)虛擬的大網(wǎng),使用戶與其他網(wǎng)的通訊就像與本網(wǎng)的主機(jī)通訊一樣方便實(shí)現(xiàn),這一思想的相關(guān)協(xié)議有TELNET、FTP、SMTP、TCP、UDP、IP、ICMP、ARP、RARP等。TCP/IP體系結(jié)構(gòu)TCP/IP協(xié)議實(shí)際上就是在物理網(wǎng)上的一組完整的網(wǎng)絡(luò)協(xié)議。其中TCP是提供傳輸層服務(wù),而IP則是提供網(wǎng)絡(luò)層服務(wù)。TCP/IP包括以下協(xié)議(結(jié)構(gòu)如圖2-1所示):圖2-1TCP/IP協(xié)議體系結(jié)構(gòu)IP:網(wǎng)間協(xié)議(Int
16、ernetProtocol)負(fù)責(zé)主機(jī)問(wèn)數(shù)據(jù)的路由和網(wǎng)絡(luò)上數(shù)據(jù)的存儲(chǔ)同時(shí)為ICMP,TCP,UDP提供分組發(fā)送服務(wù)。用戶進(jìn)程通常不需要涉及這一層。ARP:地址解析協(xié)議(AddressResolutionProtocol)此協(xié)議將網(wǎng)絡(luò)地址映射到硬件地址。RARP:反向地址解析協(xié)議(ReverseAddressResolutionProtocol)此協(xié)議將硬件地址映射到網(wǎng)絡(luò)地址。ICMP:網(wǎng)間報(bào)文控制協(xié)議(InternetControlMessageProtoco)此協(xié)議處理信關(guān)和主機(jī)的差錯(cuò)和傳送控制。TCP:傳送控制協(xié)議(TransmissionControlProtocol)這是一種提供給用戶進(jìn)
17、程的可靠的全雙工字節(jié)流面向連接的協(xié)議。它要為用戶進(jìn)程提供虛電路服務(wù),并為數(shù)據(jù)可靠傳輸建立檢查。(注:大多數(shù)網(wǎng)絡(luò)用戶程序使用TCP)。UDP:用戶數(shù)據(jù)報(bào)協(xié)議(UserDatagramProtocol)這是提供給用戶進(jìn)程的無(wú)連接協(xié)議,用于傳送數(shù)據(jù)而不執(zhí)行正確性檢查。FTP:文件傳輸協(xié)議(FileTransferProtocol)允許用戶以文件操作的方式(文件的增、刪、改、查、傳送等)與另一主機(jī)相互通信。SMTP:簡(jiǎn)單郵件傳送協(xié)議(SimpleMailTransferProtocol)SMTP協(xié)議為系統(tǒng)之間傳送電子郵件。TELNET:終端協(xié)議(TelnetTerminalProcotol)允許用戶以
18、虛終端方式訪問(wèn)遠(yuǎn)程主機(jī)。HTTP:超文本傳輸協(xié)議(HypertextTransferProcotol)。是用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。它可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少。TFTP:簡(jiǎn)單文件傳輸協(xié)議(TrivialFileTransferProtocol)0它是TCP/IP協(xié)議族中的一個(gè)用來(lái)在客戶機(jī)與服務(wù)器之間進(jìn)行簡(jiǎn)單文件傳輸?shù)膮f(xié)議,提供不復(fù)雜、開(kāi)銷不大的文件傳輸服務(wù)。TCP/IP特點(diǎn)TCP/IP協(xié)議的核心部分是傳輸層協(xié)議(TCP、UDP),網(wǎng)絡(luò)層協(xié)議(IP)和物理接口層,這三層通常是在操作系統(tǒng)內(nèi)核中實(shí)現(xiàn)3,因此用戶一般不涉及。編程時(shí),編程界面有兩種形式:一、是由內(nèi)核
19、心直接提供的系統(tǒng)調(diào)用;二、使用以庫(kù)函數(shù)方式提供的各種函數(shù)。前者為核內(nèi)實(shí)現(xiàn),后者為核外實(shí)現(xiàn)。用戶服務(wù)要通過(guò)核外的應(yīng)用程序才能實(shí)現(xiàn),所以要使用套接字(Socket)來(lái)實(shí)現(xiàn),圖2-2就是反映TCP/IP協(xié)議核心與應(yīng)用程序的關(guān)圖2-2TCP/IP協(xié)議核心與應(yīng)用程序關(guān)系圖TCP/IP傳送文件機(jī)制下面以采用TCP/IP協(xié)議傳送文件為例,說(shuō)明TCP/IP的工作原理4,其工作流程如下:(1)在源主機(jī)上,應(yīng)用層將一用應(yīng)用數(shù)據(jù)流傳送給傳輸層。(2)傳輸層將應(yīng)用層的數(shù)據(jù)流截成分組,并加上TCP報(bào)頭形成TCP段,送交網(wǎng)絡(luò)層。(3)在網(wǎng)絡(luò)層給TCP段加上包括源、目的主機(jī)IP地址的IP報(bào)頭,生成一個(gè)IP數(shù)據(jù)包,并將IP數(shù)
20、據(jù)包送交鏈路層。(4)鏈路層在其MAC幀的數(shù)據(jù)部分裝上IP數(shù)據(jù)包,再加上源、目的主機(jī)的MAC地址和幀頭,并根據(jù)其目的MAC地址,將MAC幀發(fā)往目的主機(jī)或IP路由器。(5)在目的主機(jī),鏈路層將MAC幀的幀頭去掉,并將IP數(shù)據(jù)包送交網(wǎng)絡(luò)層。(6)網(wǎng)絡(luò)層檢查IP報(bào)頭,如果報(bào)頭中校驗(yàn)和與計(jì)算結(jié)果不一致,則丟棄該IP數(shù)據(jù)包;若校驗(yàn)和與計(jì)算結(jié)果一致,則去掉IP報(bào)頭,將TCP段送交傳輸層。(7)傳輸層檢查順序號(hào),判斷是否是正確的TCP分組,然后檢查T(mén)CP報(bào)頭數(shù)據(jù)。若正確,則向源主機(jī)發(fā)確認(rèn)信息;若不正確或丟包,則向源主機(jī)要求重發(fā)信息。(8)在目的主機(jī),傳輸層去掉TCP報(bào)頭,將排好順序的分組組成應(yīng)用數(shù)據(jù)流送給應(yīng)
21、用程序0這樣目的主機(jī)接收到的來(lái)自源主機(jī)的字節(jié)流,就像是直接接收來(lái)自源主機(jī)的字節(jié)流一樣。2.3客戶機(jī)/服務(wù)器模式20世紀(jì)90年代以來(lái),客戶機(jī)/服務(wù)器(client/sevrei)模式得到了十分迅速的流行與發(fā)展。幾乎每個(gè)新的網(wǎng)絡(luò)操作系統(tǒng)和每個(gè)新的多用戶數(shù)據(jù)庫(kù)系統(tǒng)都聲稱能夠支持C/S模式。實(shí)現(xiàn)C/S模式允許有許多不同的策略。從數(shù)據(jù)庫(kù)管理系統(tǒng)的應(yīng)用來(lái)看,在LAN上采用的C/S模式6,即指在LAN中至少有一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器(DBMSseryer),可以作為希望去存取公共數(shù)據(jù)庫(kù)的各臺(tái)工作站的后援支持。把應(yīng)用任務(wù)中的程序執(zhí)行內(nèi)容劃分為兩個(gè)部分:與數(shù)據(jù)庫(kù)存取有關(guān)的部分由DBMSesvrer承擔(dān),與應(yīng)用的人機(jī)界面
22、處理、輸入/輸出或一部分應(yīng)用的邏輯功能等有關(guān)的內(nèi)容由client端工作站承擔(dān)7。這樣做的好處大致有:(1)充分調(diào)動(dòng)在LAN中的server與client兩方面的處理能力。(2)極大的減少網(wǎng)絡(luò)上的的信息流通量(可不再以整個(gè)文件為傳送單位,采用請(qǐng)求一服務(wù)響應(yīng)的方式,網(wǎng)上僅傳輸經(jīng)server加工處理后的那一部分必要的結(jié)果信息)。(3)有效的發(fā)揮了服務(wù)器軟硬件執(zhí)行效率高、集中管理數(shù)據(jù)庫(kù)安全方面的長(zhǎng)處,也可以充分利用PC機(jī)client端處理用戶界面的(特別是圖形用戶界面)和本地I/0的優(yōu)點(diǎn)。(4)C/S體系結(jié)構(gòu)有可能提供一種開(kāi)放式的、易于伸縮擴(kuò)展的分布式計(jì)算環(huán)境,并保護(hù)硬件等投資。近年來(lái)已經(jīng)普遍采用了三
23、層方式的C/S模式,采用三層C/S模式的好處是:(1)可以更方便、更清晰地分工應(yīng)用軟件的設(shè)計(jì)任務(wù)。(2)可以降低對(duì)客戶機(jī)的要求,使客戶機(jī)只需處理人機(jī)界面為主的工作,適應(yīng)日益擴(kuò)展的應(yīng)用需求。(3)防止客戶機(jī)上有權(quán)連接數(shù)據(jù)庫(kù)的用戶繞過(guò)系統(tǒng)中的客戶端應(yīng)用系統(tǒng),利用自行安裝在客戶機(jī)上的數(shù)據(jù)庫(kù)訪問(wèn)工具非法訪問(wèn)某些未授權(quán)的數(shù)據(jù),從而保證了安全性(由功能服務(wù)器負(fù)責(zé))。(4)避免了在客戶機(jī)上分發(fā)應(yīng)用程序與版本控制上的困難。對(duì)于文件傳輸系統(tǒng)來(lái)說(shuō),采用客戶機(jī)/服務(wù)器模式能夠方便用戶進(jìn)行操作從而提高工作效率。第三章Winsock網(wǎng)絡(luò)程序設(shè)計(jì)技術(shù)Winsock簡(jiǎn)介為了方便網(wǎng)絡(luò)編程,Microsoft聯(lián)合了其他幾家公司
24、共同制定了一套WINDOWS下的網(wǎng)絡(luò)編程接口6,即WindowsSockets規(guī)范,它不是一種網(wǎng)絡(luò)協(xié)議,而是一套開(kāi)放的、支持多種協(xié)議的Windows下的網(wǎng)絡(luò)編程接口。現(xiàn)在的Winsock已經(jīng)基本上實(shí)現(xiàn)了與協(xié)議無(wú)關(guān),你可以使用Winsock來(lái)調(diào)用多種協(xié)議的功能,但較常使用的是TCP/IP協(xié)議。Socket實(shí)際在計(jì)算機(jī)中提供了一個(gè)通信端口,可以通過(guò)這個(gè)端口與任何一個(gè)具有Socket接口的計(jì)算機(jī)通信。應(yīng)用程序在網(wǎng)絡(luò)上傳輸和接收的信息都通過(guò)這個(gè)Socket接口來(lái)實(shí)現(xiàn)。Winsock規(guī)范定義了一套可使網(wǎng)絡(luò)程序開(kāi)發(fā)人員在Windows下開(kāi)發(fā)標(biāo)準(zhǔn)的TCP/IP網(wǎng)絡(luò)程序接口,它不僅包含人們所熟悉的Berkel
25、eySocket風(fēng)格的庫(kù)函數(shù),還包含了一組針對(duì)Windows的擴(kuò)展庫(kù)函數(shù),以使程序員能充分地利用Windows消息驅(qū)動(dòng)機(jī)制、異步網(wǎng)絡(luò)事件選擇方式進(jìn)行編程。Winsock規(guī)范定義并記錄了任何使用API與Internet通訊協(xié)議(ISP通常指TCP/IP)連接叫應(yīng)用程序使用WindowsSockets的API,而WindowsSockets又利用下層的網(wǎng)絡(luò)通信協(xié)議與操作系統(tǒng)以產(chǎn)生實(shí)際的通信,它們之間的關(guān)系如下圖3-1所示。圖3-1應(yīng)用程序與WindowsSockets關(guān)系圖Winsock通信機(jī)制應(yīng)用程序的網(wǎng)絡(luò)通信歸根結(jié)底是利用相同的通信協(xié)議來(lái)完成信息的傳輸,應(yīng)用程序和Winsock都工作在Wind
26、ows的用戶模式下,操作系統(tǒng)僅僅通過(guò)Winsock是不能完成網(wǎng)絡(luò)間的通信4,還需要底層的支持,而套接字仿真器(套接字核心模式驅(qū)動(dòng)程序)和傳輸驅(qū)動(dòng)程序接口(TransportDriverInterface,TDI)是負(fù)責(zé)操作系統(tǒng)核心態(tài)環(huán)境下的網(wǎng)絡(luò)通信,起到了Winsock和傳輸協(xié)議之間的通信橋梁作用。如圖3-2所示,Winsock是網(wǎng)絡(luò)通信應(yīng)用程序于套接字仿真器間的接口,TDI是套接字仿真器和傳輸協(xié)議間的接口套接字核心模式,驅(qū)動(dòng)程序復(fù)雜連接和緩沖區(qū)管理,以便向應(yīng)用程序提供套接字仿真(在AFDSYS文件中實(shí)現(xiàn)),同時(shí)負(fù)責(zé)與底層傳輸驅(qū)動(dòng)程序?qū)υ拏鬏旘?qū)動(dòng)程序接口(TDI)負(fù)責(zé)核心模式驅(qū)動(dòng)程序與傳輸協(xié)議
27、間的通信。圖3-2套接字通信機(jī)制示意圖當(dāng)應(yīng)用程序利用Winsock發(fā)送和接受數(shù)據(jù)時(shí),并不是由Winsock從網(wǎng)絡(luò)上發(fā)送和接收數(shù)據(jù)的,而是由核心模式驅(qū)動(dòng)程序AFDSYS負(fù)責(zé)管理發(fā)送和接收緩沖區(qū)來(lái)發(fā)送和接收數(shù)據(jù)6。也就是說(shuō),當(dāng)應(yīng)用程序調(diào)用send或WSASend函數(shù)來(lái)發(fā)送數(shù)據(jù)時(shí),AFDSYS將把數(shù)據(jù)復(fù)制進(jìn)他自己的發(fā)送緩沖區(qū),然后send后WSASend函數(shù)立即返回AFDSYS在后臺(tái)負(fù)責(zé)把數(shù)據(jù)發(fā)送出去,遠(yuǎn)程客戶端接收數(shù)據(jù)的情況也類似,由接收方的AFDSYS在后臺(tái)負(fù)責(zé)把數(shù)據(jù)復(fù)制到自己的接收緩沖區(qū),然后當(dāng)應(yīng)用程序調(diào)用recv后WSARecv函數(shù)來(lái)接收數(shù)據(jù)時(shí),把數(shù)據(jù)由AFDSYS管理的接收緩沖區(qū)復(fù)制到應(yīng)用
28、程序提供的緩沖區(qū)中。AFDSYS管理的發(fā)送緩沖區(qū)SO-SNDBUF和接收緩沖區(qū)SO-RCVBUF在缺省時(shí)兩個(gè)緩沖區(qū)的大小都為8192個(gè)字節(jié),但可以根據(jù)實(shí)際要求由應(yīng)用程序設(shè)定,由于我們傳輸?shù)膶?duì)象可能是大數(shù)據(jù)量文件,因此需要對(duì)系統(tǒng)的發(fā)送緩沖區(qū)和接收緩沖區(qū)作相應(yīng)的設(shè)定,以保障大數(shù)據(jù)量的文件數(shù)據(jù)的發(fā)送和接收。Sockets的實(shí)質(zhì)是通信端點(diǎn)的一種抽象,它提供一種發(fā)送和接受數(shù)據(jù)的機(jī)制。根據(jù)通信性質(zhì)不同可分為:StreamSockets(流式套接字)和DatagramSockets(數(shù)據(jù)報(bào)套接字),如圖3-3所示為這兩種套接字的基本通信方式。其中StreamSockets提供無(wú)差錯(cuò)的、面向連接的、無(wú)長(zhǎng)度限制
29、的雙向字節(jié)流傳輸,適應(yīng)于處理大量數(shù)據(jù),尤其適合于FTP服務(wù)。DatagramSockets支持雙向的數(shù)據(jù)傳輸、但傳輸過(guò)程中不能保證可靠性和無(wú)差錯(cuò)性;本設(shè)計(jì)的程序設(shè)計(jì)中選擇StreamSocket冰完成C/S模式的通信,保證能夠數(shù)據(jù)準(zhǔn)確、無(wú)誤的傳輸ServerliServerbind()accept()Blocksuntilconnectionfromclientconnectionwrite()1read()requestprocessrequestreplyread()3-3-1面向連接的流方式3-3-2非連接的數(shù)據(jù)包方式圖3-3Socke的兩種通信方式Winsock編程模型建立一個(gè)Sock
30、et為了建立Socket,程序調(diào)用Socket函數(shù)如下:Sockethandle=Socket(協(xié)議簇”,Socket類型“,協(xié)議”);Winsock函數(shù)含有三個(gè)參數(shù),協(xié)議簇”參數(shù)指明像TCP/IP協(xié)議組這樣的一組相關(guān)協(xié)議,Socket類型”參數(shù)指明參數(shù)指明程序是進(jìn)行數(shù)據(jù)報(bào)傳輸還是字節(jié)流傳輸,協(xié)議”參數(shù)定義了協(xié)議族內(nèi)程序欲使用的具體協(xié)議(如TCP或UDP)。由于編程時(shí)必須指定程序使用的協(xié)議簇,因而能夠?yàn)槭褂貌煌瑓f(xié)議組和地址格式的網(wǎng)絡(luò)建立相同的接口。也就是說(shuō),本函數(shù)的正確調(diào)用可使Winsock接口運(yùn)行在多個(gè)網(wǎng)絡(luò)上。下面語(yǔ)句顯示了一個(gè)典型的具體Winsock函數(shù)調(diào)用:Sockethandle=So
31、cket(PFINET,SOCKSTREAM,IPPROTOTCP);這個(gè)Winsock使用Internet協(xié)議簇(PFINET)的TCP協(xié)議(IPPROTOTCP)進(jìn)行字節(jié)流(SOCKSTREAM)通信。當(dāng)程序調(diào)用Winsock函數(shù)建立一個(gè)新Socket時(shí),Winsock將為一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu)分配內(nèi)存,此結(jié)構(gòu)中保存有關(guān)此Socket的信息。配置一個(gè)Socket程序可使用Winsock中不同的函數(shù)來(lái)配置一個(gè)Socket。每個(gè)Socket需要五種信息:本地和遠(yuǎn)地本機(jī)的IP地址、本地和遠(yuǎn)地進(jìn)程的協(xié)議端口、連接使用的協(xié)議。面向連接的協(xié)議在連接端點(diǎn)之間建立一條虛電路,面向連接的客戶程序不必關(guān)心網(wǎng)絡(luò)軟件使
32、用怎樣的本地地址傳輸數(shù)據(jù)。建立好連接后,客戶程序依靠TCP協(xié)議給它傳送數(shù)據(jù)。因此面向連接的客戶程序不需指明本地協(xié)議端口,它提供給Socket的唯一地址信息是遠(yuǎn)地服務(wù)器信息(IP地址和協(xié)議端口)。Winsock自動(dòng)保存本地IP地址和選擇本地協(xié)議端口,并確??蛻舫绦蚴盏絺鬏攲铀徒o本地協(xié)議端口的所有數(shù)據(jù)。也就是說(shuō),Winsock為程序選擇協(xié)議端口,當(dāng)數(shù)據(jù)到達(dá)此端口時(shí)通知程序,程序不必關(guān)心Winsock使用哪一個(gè)協(xié)議端口。在前一步已建立的Socket基礎(chǔ)上,面向連接的客戶程序使用connect函數(shù)來(lái)配置Socketresult=connect(Socket句柄”,遠(yuǎn)地Socket地址”,遠(yuǎn)地Socke
33、t地址”);此時(shí),內(nèi)部數(shù)據(jù)結(jié)構(gòu)就包含了網(wǎng)絡(luò)通信必須的五種信息。只有面向連接的客戶進(jìn)程才啟動(dòng)與遠(yuǎn)地服務(wù)器Socket的直接連接。無(wú)連接協(xié)議不建立與遠(yuǎn)地服務(wù)器的直接連接。使用無(wú)連接協(xié)議的客戶程序必須發(fā)送一個(gè)帶有服務(wù)請(qǐng)求的數(shù)據(jù)報(bào)并等待應(yīng)答,遠(yuǎn)地服務(wù)器的應(yīng)答以數(shù)據(jù)報(bào)的形式到達(dá)。Winsock用bind函數(shù)給Socket指定一個(gè)本地IP地址和一個(gè)協(xié)議端口,其典型調(diào)用如下:result=bind(Socket句柄”,本地Socket地址”,本地Socket地址長(zhǎng)度”);服務(wù)器程序使用bind函數(shù)用Winsock登記一個(gè)協(xié)議端口,程序告訴Winsock監(jiān)視哪一個(gè)協(xié)議端口的數(shù)據(jù)傳送,Winsock接著告訴傳輸
34、層將此協(xié)議端口收到的數(shù)據(jù)傳送給Winsocko使用Socket配置好一個(gè)Socket后,程序就能夠使用Winsock在網(wǎng)絡(luò)上傳送和接收數(shù)據(jù)了。Winsock有四個(gè)函數(shù):兩個(gè)用于數(shù)據(jù)傳送(sendsendto),兩個(gè)用于數(shù)據(jù)接收(recv、recvfrom)。由于send和recv函數(shù)不能指定目的地址,只能用于面向連接的Socket,其典型調(diào)用過(guò)程為:result=send(Socket句柄”,報(bào)文緩沖區(qū)”,緩沖區(qū)長(zhǎng)度”,特殊標(biāo)志”);Winsock將從Socket句柄確定的內(nèi)部Socket數(shù)據(jù)結(jié)構(gòu)中獲取目的地址信息,接著send函數(shù)將傳送報(bào)文緩沖區(qū)中的數(shù)據(jù),這些數(shù)據(jù)將被傳送到Winsock內(nèi)部
35、Socket數(shù)據(jù)結(jié)構(gòu)中指明的網(wǎng)絡(luò)地址中去。recv函數(shù)與之相對(duì)應(yīng),其調(diào)用過(guò)程為:result=recv(Socket句柄”,報(bào)文緩沖區(qū)”,緩沖區(qū)長(zhǎng)度”,特殊標(biāo)志”);程序在無(wú)連接的Socket上使用sendto和recvfrom函數(shù),其使用如下:result=sendto(Socket句柄”,報(bào)文緩沖區(qū)”,緩沖區(qū)長(zhǎng)度”,特殊標(biāo)志",Socket地址結(jié)構(gòu)”,地址結(jié)構(gòu)長(zhǎng)度”);result=recvfrom(Socket句柄”,報(bào)文緩沖區(qū)”,緩沖區(qū)長(zhǎng)度”,特殊標(biāo)志",Socket地址結(jié)構(gòu)”,地址結(jié)構(gòu)長(zhǎng)度”);sendto函數(shù)在Winsock的內(nèi)部數(shù)據(jù)結(jié)構(gòu)中保存遠(yuǎn)地服務(wù)器信息,在
36、程序調(diào)用sendto函數(shù)之前,必須在一個(gè)Socket數(shù)據(jù)結(jié)構(gòu)中保存遠(yuǎn)地服務(wù)器信息,程序?qū)⒋说刂方Y(jié)構(gòu)的指針傳遞給sendto函數(shù)。當(dāng)Winsock需要傳輸層傳送sendto報(bào)文緩沖區(qū)中的數(shù)據(jù)時(shí),Winsock將其內(nèi)部數(shù)據(jù)結(jié)構(gòu)保存的信息傳送給傳輸層,傳輸層使用此數(shù)據(jù)結(jié)構(gòu)中的信息格式化UDP數(shù)據(jù)報(bào)頭,并將此數(shù)據(jù)通過(guò)網(wǎng)絡(luò)傳送。使用recvfrom函數(shù)的服務(wù)器需要分離出發(fā)送者的地址,客戶程序使用recvfrom函數(shù)時(shí),如果客戶想繼續(xù)進(jìn)行網(wǎng)絡(luò)對(duì)話,就需要分離出發(fā)送者的地址。特殊標(biāo)志”參數(shù)使用符號(hào)常數(shù)MSGOOB作為標(biāo)志值,表示可以從協(xié)議端口請(qǐng)求帶外數(shù)據(jù)。帶外數(shù)據(jù)是程序必須立即處理的緊急數(shù)據(jù),如存在帶外數(shù)據(jù)
37、,函數(shù)立即將緊急數(shù)據(jù)返回給程序,如果沒(méi)有帶外數(shù)據(jù),函數(shù)返回常數(shù)錯(cuò)誤值EINVAL0若特殊標(biāo)志,參數(shù)使用符號(hào)常數(shù)MSG-PEEK作為標(biāo)志值,表示可以對(duì)傳輸層輸入隊(duì)列中的數(shù)據(jù)進(jìn)行分析。如果不需使用這兩個(gè)標(biāo)志,可將特殊標(biāo)志”參數(shù)指定為00第四章系統(tǒng)方案設(shè)計(jì)本章對(duì)系統(tǒng)的總體方案進(jìn)行了設(shè)計(jì),比較了C/S模式和B/S模式的不同并采用了C/S模式作為系統(tǒng)的整體結(jié)構(gòu)模型,對(duì)多個(gè)文件傳輸協(xié)議進(jìn)行了比較與分析,最后確立采用基于Socket的新的專用文件傳輸協(xié)議來(lái)實(shí)現(xiàn)系統(tǒng)的具體要求,具有較高的靈活性,軟件開(kāi)發(fā)方法采用面向?qū)ο筌浖_(kāi)發(fā)方式,最后介紹了系統(tǒng)的總體的設(shè)計(jì)流程。4.1B/S結(jié)構(gòu)與C/S結(jié)構(gòu)的選擇B/S結(jié)構(gòu)與
38、C/S結(jié)構(gòu)B/S模式是一種以Web技術(shù)為基礎(chǔ)的新型的系統(tǒng)平臺(tái)模式18,它把傳統(tǒng)C/S模式中的服務(wù)器部分分解為一個(gè)數(shù)據(jù)服務(wù)器與一個(gè)或多個(gè)應(yīng)用服務(wù)器(Web服務(wù)器),從而構(gòu)成一個(gè)三層結(jié)構(gòu)的客戶服務(wù)器體系,它簡(jiǎn)化了客戶端。其次,它簡(jiǎn)化了系統(tǒng)的開(kāi)發(fā)和維護(hù)。各個(gè)用戶通過(guò)HTTP請(qǐng)求在權(quán)限范圍內(nèi)調(diào)用Wbe服務(wù)器上不同處理程序,從而完成對(duì)數(shù)據(jù)的查詢或修改。相對(duì)于C/S,B/S的維護(hù)具有更大的靈活性。另外,它使用戶的操作變得更簡(jiǎn)單。C/S模式的客戶應(yīng)用程序有自己特定的規(guī)格,使用者需要接受專門(mén)培訓(xùn)。而采用B/S模式時(shí),客戶端只是一個(gè)簡(jiǎn)單易用的瀏覽器軟件,無(wú)論是決策層還是操作層的人員都無(wú)需培訓(xùn),就可以直接使用。I
39、nternet/Intranet采用的B/S計(jì)算模型實(shí)質(zhì)上是一種擴(kuò)展了的C/S模型。其一端是Web客戶,一端是Web服務(wù)器,二者通過(guò)HTTP協(xié)議通信??蛻粝蚍?wù)器發(fā)出服務(wù)請(qǐng)求,包括對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)請(qǐng)求,服務(wù)器響應(yīng)客戶請(qǐng)求并把響應(yīng)結(jié)果送給客戶瀏覽器。使用瀏覽器(如IE)與某一臺(tái)主機(jī)或系統(tǒng)進(jìn)行連接,并不需要更換軟件或再啟動(dòng)其它軟件,所以用戶的界面具有一致性,易于操作。C/S模式主要由客戶應(yīng)用程序、服務(wù)器管理程序和中間件三個(gè)部分組成。首先,交互性強(qiáng)是C/S固有的一個(gè)優(yōu)點(diǎn)。在C/S中,客戶端有一套完整應(yīng)用程序,在出錯(cuò)提示、在線幫助等方面都有強(qiáng)大的功能,并且可以在子程序間自由切換。其次,C/S模式提供了更
40、安全的存取模式。由于C/S在邏輯結(jié)構(gòu)上比B/S少一層,對(duì)于相同的任務(wù),C/S完成的速度總比B/S處理速度快,使得C/S更利于處理大量數(shù)據(jù)。在系統(tǒng)平臺(tái)模式時(shí),要考慮到B/S模式的先進(jìn)性,也要考慮到C/S模式的成熟性,還可以根據(jù)系統(tǒng)自身的業(yè)務(wù)特點(diǎn),采取C/S與B/S交叉并用的體系結(jié)構(gòu)。C/S模式的采用網(wǎng)絡(luò)應(yīng)用的最主要的模型是Client/Server模型,其實(shí)質(zhì)是請(qǐng)求驅(qū)動(dòng)"。Client/Server模型最終可歸結(jié)為一種請(qǐng)求/應(yīng)答”關(guān)系19。一個(gè)請(qǐng)求總是首先被客戶發(fā)出,然后服務(wù)器總是被動(dòng)地接收請(qǐng)求,返回客戶需要的結(jié)果。在客戶發(fā)出一個(gè)請(qǐng)求之前,服務(wù)進(jìn)程一直處于休眠狀態(tài)。一個(gè)客戶提出請(qǐng)求后,
41、服務(wù)進(jìn)程被喚醒”并且為客戶提供服務(wù),對(duì)客戶的請(qǐng)求作出所需要的應(yīng)答。這一請(qǐng)求/應(yīng)答相應(yīng)的過(guò)程可以用圖4-1來(lái)表示。網(wǎng)絡(luò)圖4-1Client/Server模型由于本系統(tǒng)需要支持分組文件的斷點(diǎn)續(xù)傳,需要向客戶端提供比較完善的功能,支持子程序的方便切換、支持新的應(yīng)用層通信協(xié)議等等,而B(niǎo)/S模式與C/S相比不能在這些方面提供很好的支持,所以本系統(tǒng)采用了Client/Server模式,同時(shí)也利用了Client/Server模型五個(gè)方面的特點(diǎn):(1)是Client/Server模型最重要的特點(diǎn)是非對(duì)等相互作用,即客戶與服務(wù)器處于不平等的地位,服務(wù)器擁有客戶所不具備的硬軟件資源,客戶和服務(wù)器分別是服務(wù)的請(qǐng)求者
42、和提供者。實(shí)際上,網(wǎng)絡(luò)中各個(gè)機(jī)器的資源是不平等的,網(wǎng)絡(luò)的真正目的就是共享這些不均等的資源,Client/Server模型的非對(duì)等相互作用特點(diǎn)也正好體現(xiàn)和適應(yīng)了客觀現(xiàn)實(shí)中資源的不均等現(xiàn)象。(2)關(guān)于技術(shù)性的,網(wǎng)絡(luò)上不同主機(jī)進(jìn)程間通信完全是異步的,通信時(shí)機(jī)具有隨機(jī)性,所以必須有一種為通信雙方的數(shù)據(jù)交換提供同步的機(jī)制,而Client/Serverr模型對(duì)此機(jī)制提供了極好的支持。由于上述原因,Client/Server模型由Sybas必司首先提出并在實(shí)際中應(yīng)用后,迅速獲得了廣泛的支持,事實(shí)上己成為網(wǎng)絡(luò)應(yīng)用的標(biāo)準(zhǔn)模式。(3)可以更方便、更清晰地分工應(yīng)用軟件的設(shè)計(jì)任務(wù)。(4)可以降低對(duì)客戶機(jī)的要求,使客戶
43、機(jī)只需處理人機(jī)界面為主的工作,適應(yīng)日益擴(kuò)展的應(yīng)用需求。(5)防止客戶機(jī)上有權(quán)連接數(shù)據(jù)庫(kù)的用戶繞過(guò)系統(tǒng)中的客戶端應(yīng)用系統(tǒng),利用自行安裝在客戶機(jī)上的數(shù)據(jù)庫(kù)訪問(wèn)工具非法訪問(wèn)某些未授權(quán)的數(shù)據(jù),從而保證了安全性(由功能服務(wù)器負(fù)責(zé))。文件傳輸協(xié)議的比較本系統(tǒng)能夠支持文件分組上傳并且同時(shí)能夠處理文件在分組傳輸時(shí)網(wǎng)絡(luò)發(fā)生斷線后的續(xù)傳問(wèn)題,而且很重要的一點(diǎn)是客戶可以在客戶端程序的界面上對(duì)文件進(jìn)行分組,這樣一是可以方便用戶的操作,二是可以更少的暴露服務(wù)器端的內(nèi)容從而保證服務(wù)器的安全。三是操作簡(jiǎn)單,容易實(shí)現(xiàn)。早期文件傳輸協(xié)議的研究比較在上第一章里,我們?cè)?jīng)簡(jiǎn)單的列舉了幾種用于文件傳輸?shù)膮f(xié)議,包括XODME等一些早一
44、些開(kāi)發(fā)的文件傳輸協(xié)議,其中雖然YMODEM傳輸協(xié)議支持分組文件傳輸,從表面上看應(yīng)該采用這種協(xié)議,但是由于以下兩個(gè)原因而沒(méi)有采用,一是因?yàn)檫@個(gè)協(xié)議要指定一個(gè)目錄,然后協(xié)議才能把目錄下的所有文件傳送到服務(wù)器端,這樣,如果用戶要傳輸10組圖片附帶聲音檔的組文件,那么就需要用戶親自建立10個(gè)文件夾,分10次傳送出去,這樣非常影響用戶的工作效率;假設(shè)文件被分組傳輸?shù)搅朔?wù)器端,由于協(xié)議中沒(méi)有對(duì)分組文件的管理支持,更談不上發(fā)生斷點(diǎn)時(shí)保證組文件關(guān)聯(lián)上的完整性了,二是因?yàn)檫@個(gè)協(xié)議誕生在DOS系統(tǒng)很流行的時(shí)候,所以這個(gè)協(xié)議對(duì)DOS軟件比較合適,對(duì)于現(xiàn)在運(yùn)行在圖形界面下的程序來(lái)說(shuō),如果采用這種協(xié)議來(lái)進(jìn)行文件的分組
45、傳輸,則不能很好的發(fā)揮圖形界面友好的特性,從而會(huì)使用戶感覺(jué)很不方便。對(duì)于文件傳輸協(xié)議XMODEMCRC協(xié)議,XMODEM1K協(xié)議,YMODEMG協(xié)議,ZMODEM協(xié)議,Kermit協(xié)議,也存在相似的問(wèn)題,所以本系統(tǒng)并沒(méi)有采用它們來(lái)作為文件傳輸所采用的通信協(xié)議。HTTP協(xié)議傳輸文件的方式HTTP協(xié)議建立在請(qǐng)求/應(yīng)答模型上,一個(gè)請(qǐng)求的程序(叫作客戶)與一個(gè)接收程序(叫作服務(wù)器)建立連接16。HTTP協(xié)議中傳輸?shù)臄?shù)據(jù)稱為實(shí)體(Entity),它可能包含請(qǐng)求和響應(yīng)資源的特定表示或解釋。一個(gè)實(shí)體由實(shí)體首部(Entity-HEAD)和實(shí)體主體(Entity-BODY)構(gòu)成。在請(qǐng)求/響應(yīng)模型中,客戶請(qǐng)求的形
46、式是請(qǐng)求方法、統(tǒng)一資源標(biāo)示符(URI)和協(xié)議版本號(hào),后面緊跟包含請(qǐng)求參數(shù)、客戶信息,可能還有信息自身的內(nèi)容等,服務(wù)器用一個(gè)狀態(tài)響應(yīng)(包括它的協(xié)議版本號(hào)、成功或失敗代碼),后面緊跟包含服務(wù)器信息、實(shí)體信息,可能還有信息的內(nèi)容等。A請(qǐng)求文件上傳(Head)B響應(yīng)客戶請(qǐng)求C發(fā)送PUT請(qǐng)求數(shù)據(jù)D傳送允許發(fā)送信號(hào)E接受和發(fā)送數(shù)據(jù)圖4-2利用HTT初議進(jìn)行文件上載的過(guò)程HTTP/1.1以及以后的版本的請(qǐng)求型消息(ReuqestMesasge中定義了多種請(qǐng)求方法,其中GTE、HEAD、PUT方法可以用于文件傳輸。由于HTTP協(xié)議支持下的文件傳輸只涉及到客戶端程序設(shè)計(jì),因而軟件實(shí)現(xiàn)不依賴于其它應(yīng)用程序,只與具
47、體的WEB服務(wù)器有關(guān)(如果WEB服務(wù)器遵循國(guó)際標(biāo)準(zhǔn)的話,HTTP協(xié)議進(jìn)行文件傳輸?shù)目蛻舫绦驅(qū)⑹峭耆?dú)立的)。以下是向服務(wù)器上載文件為例說(shuō)明其設(shè)計(jì)與實(shí)現(xiàn)。圖4-2是服務(wù)器/客戶機(jī)發(fā)送和接收信息的過(guò)程由于在本章第一節(jié)中已經(jīng)采用C/S作為系統(tǒng)基本開(kāi)發(fā)平臺(tái)模式,而利用HTTP協(xié)議進(jìn)行文件上傳屬于B/S范疇,況且在網(wǎng)站中已經(jīng)實(shí)現(xiàn)了這種文件傳輸方式,從而能夠滿足單個(gè)文件傳輸?shù)男枨?,但是不能滿足分組文件傳輸?shù)男枨?。FTP文件傳輸協(xié)議的研究在Interent上,F(xiàn)TP是文件傳輸事實(shí)上的標(biāo)準(zhǔn),它用來(lái)在不同主機(jī)之間傳送二進(jìn)制、圖形、ASCII文本等各種類型的文件。FTP有兩種訪問(wèn)方式:用戶FTP和匿名FTP。前者
48、指用戶在FTP服務(wù)器上擁有帳號(hào)并允許用戶訪問(wèn)允許訪問(wèn)的文件;后者允許用戶以匿名”方式進(jìn)入系統(tǒng),即用戶不需要在服務(wù)器上擁有帳號(hào)就可以存取或傳送文件。相對(duì)而言,后者因?yàn)榻o用戶的自由度較大而使用得較多。FTP的目標(biāo)是提高文件的共享性,提供非直接使用遠(yuǎn)程計(jì)算機(jī),使存儲(chǔ)介質(zhì)對(duì)用戶透明和可靠高效地傳送數(shù)據(jù)。雖然我們也可以手工使用它,但是它的主要作用是供程序使用的。FTP支持用戶登錄,提供用戶名和可選的口令,可以列出目錄,并發(fā)送和接收文件。FTP不僅支持用戶交互式地傳輸文件,同時(shí)也支持程序到程序的數(shù)據(jù)傳輸。數(shù)據(jù)可以是文本文件、編碼后的數(shù)據(jù),也可以是應(yīng)用程序。用戶進(jìn)程可以請(qǐng)求將一個(gè)文件從主機(jī)傳輸?shù)接脩舻挠?jì)算機(jī)
49、上,也可以在兩臺(tái)遠(yuǎn)程主機(jī)之間啟動(dòng)一個(gè)第三方傳輸。為了完成傳輸,F(xiàn)TP使用兩個(gè)TCP連接:控制命令和數(shù)據(jù)傳輸13。FTP使用Telnet協(xié)議作為其命令通道,利用Telnet的訪問(wèn)控制過(guò)程來(lái)進(jìn)行用戶的身份認(rèn)證。建立新的利用套接字方式的通信協(xié)議前面已經(jīng)討論過(guò)了XMODEM系列協(xié)議15,RCP協(xié)議,Kermit協(xié)議,以及HTTP協(xié)議沒(méi)有被選定為本系統(tǒng)文件傳輸協(xié)議的原因。對(duì)于本系統(tǒng)沒(méi)有選擇FTP作為文件傳輸?shù)膮f(xié)議,主要考慮到在FTP的服務(wù)命令中,包含有如刪除文件(DELE)命令,刪除目錄(RMD)命令,建立目錄(MKD)命令等等,用戶可以使用這些命令來(lái)對(duì)服務(wù)器上特定的文件夾以及文件進(jìn)行操作,這樣的危險(xiǎn)性
50、也是很大的,對(duì)服務(wù)器就存在一定威脅,另外本系統(tǒng)包括服務(wù)器端用戶文件夾的創(chuàng)建、管理、以及尺寸規(guī)整等,還要對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)的讀取、更新、添加、刪除等操作,這些就使得FTP協(xié)議在處理這些特殊要求時(shí)顯得非常不合適,也顯得很不靈活,這樣就確定建立新的文件通信協(xié)議,而協(xié)議的實(shí)現(xiàn)是基于Socket套接字的,所以實(shí)現(xiàn)起來(lái)非常靈活,同時(shí)將必要的安全措施加入到協(xié)議實(shí)現(xiàn)中,就會(huì)使文件傳輸過(guò)程更加可靠。最重要的是Socket是面向客戶/服務(wù)器模型而設(shè)計(jì)的,針對(duì)客戶和服務(wù)器程序提供不同的Socket系統(tǒng)調(diào)用??蛻綦S機(jī)申請(qǐng)一個(gè)Socket(相當(dāng)于一個(gè)想打電話的人可以在任何一臺(tái)入網(wǎng)電話上撥號(hào)呼叫),系統(tǒng)為之分配一個(gè)Sock
51、et號(hào);服務(wù)器擁有全局公認(rèn)的Socket,任何客戶都可以向它發(fā)出連接請(qǐng)求和信息請(qǐng)求(相當(dāng)于一個(gè)被呼叫的電話擁有一個(gè)呼叫方知道的電話號(hào)碼)。從而很方便的實(shí)現(xiàn)了兩臺(tái)主機(jī)的連接和通信。因此最后選定基于Socket套接字方式來(lái)實(shí)現(xiàn)本設(shè)計(jì)。第五章系統(tǒng)詳細(xì)設(shè)計(jì)系統(tǒng)總體設(shè)計(jì)文件發(fā)送端點(diǎn)對(duì)點(diǎn)文件傳輸系統(tǒng)的實(shí)現(xiàn)應(yīng)包含服務(wù)器模塊、客戶端模塊、界面顯示模塊等幾個(gè)部分,整個(gè)程序采用VC+6.0完成,通信部分采用WINSOCK,主要要能夠?qū)崿F(xiàn)文件的上傳和下載,同時(shí)可以對(duì)已經(jīng)上傳的文件進(jìn)行刪除等操作。圖5-1是一個(gè)成功的文件傳輸過(guò)程的流程,但有可能出現(xiàn)接收方拒絕接收,或者在傳輸過(guò)程中,發(fā)送方取消發(fā)送或接收方取消接收的情況
52、,在編程實(shí)現(xiàn)上必須考慮這些問(wèn)題。文件接受端1:啟動(dòng)監(jiān)聽(tīng)進(jìn)程2:選擇文件,啟動(dòng)發(fā)送線程3:連接接收端4:受到連接請(qǐng)求啟動(dòng)接受線程5:發(fā)送文件屬性【詢問(wèn)對(duì)方是否接受】6:接受端選擇保存路徑,發(fā)送“同意文件接收”消息7:開(kāi)始發(fā)送文件,顯示發(fā)送進(jìn)度8:開(kāi)始接受文件,顯示接受進(jìn)度10:發(fā)送完束發(fā)送進(jìn)程9:接受完畢,:,土二口束接受進(jìn)程圖5-1文件傳輸過(guò)程的交互圖本軟件采用面向連接的流式套接字,基于客戶/服務(wù)器模型。為了使用方便,將客戶和服務(wù)器設(shè)計(jì)在同一個(gè)用戶界面中,根據(jù)用戶需要將程序設(shè)置成客戶端或者服務(wù)器端。程序工作時(shí),首先由程序建立套接字連接,在連接的基礎(chǔ)上,由重載的Socket事件通知函數(shù)啟動(dòng)相應(yīng)的
53、任務(wù)。為了提高程序的反應(yīng)速度,程序的文件上傳和文件下載任務(wù)由輔助線程啟動(dòng)。程序的調(diào)用時(shí)序圖如下(圖5-2所示):服務(wù)器客戶機(jī)圖5-2系統(tǒng)調(diào)用時(shí)序圖系統(tǒng)功能模塊設(shè)計(jì)服務(wù)器模塊(1)在初始化階段調(diào)用WSAStartup()此函數(shù)在應(yīng)用程序中初始化WindowsSocketsDLL,只有此函數(shù)調(diào)用成功后,應(yīng)用程序才可以再調(diào)用其他WindowsSocketsDLL中的API函數(shù)。在程序中調(diào)用該函數(shù)的形式如下:WSAStartup(WORD)(1<<8|1),(LPWSADATA)&WSAData),其中(1<<8|1)表示我們用的是WinSocket1.1版本,WSAD
54、ata用來(lái)存儲(chǔ)系統(tǒng)傳回的關(guān)于WinSocket的資料。(2)建立Socket初始化WinSock的動(dòng)態(tài)連接庫(kù)后,需要在服務(wù)器端建立一個(gè)監(jiān)聽(tīng)的Socket,為此可以調(diào)用Socket:()函數(shù)來(lái)建立這個(gè)監(jiān)聽(tīng)的Socket,并定義此Socket所使用的通信協(xié)議。此函數(shù)調(diào)用成功返回Socket對(duì)象。失敗則返回INVALID_SOCKET(調(diào)用WSAGetLastError()可得知原因,所有WinSocket的函數(shù)都可以使用這個(gè)函數(shù)來(lái)獲取失敗的原因)。SOCKETPASCALFARSocket(intaf,inttype,intprotocol);參數(shù)::af:目前只提供PF_INET(AF_INET
55、);type:Socket的類型(SOCK_STREAM、SOCK_DGRAM);protocol:通訊協(xié)定(如果使用者不指定則設(shè)為0);如果要建立的是遵從TCP/IP協(xié)議的Socket,第二個(gè)參數(shù)type應(yīng)為SOCK_STREAM,如為UDP(數(shù)據(jù)報(bào))的Socket,應(yīng)為SOCK_DGRAM。因此本設(shè)計(jì)中type應(yīng)為SOCK_STREAM。(3)綁定端口接下來(lái)要為服務(wù)器端定義的這個(gè)監(jiān)聽(tīng)的Socket指定一個(gè)地址及端口(Port),這樣客戶端才知道待會(huì)要連接哪一個(gè)地址的哪個(gè)端口,為此我們要調(diào)用bind()函數(shù),該函數(shù)調(diào)用成功返回0,否則返回SOCKET_ERROR。intPASCALFARbi
56、nd(SOCKETs,conststructsockaddrFAR*nameintnamelen);參數(shù):s:Socket對(duì)象名;name:Socket的地址值,這個(gè)地址必須是執(zhí)行這個(gè)程式所在機(jī)器的IP地址;namelen:name的長(zhǎng)度;如果使用者不在意地址或端口的值,那么可以設(shè)定地址為INADDR_ANY,及Port為0,WindowsSockets會(huì)自動(dòng)將其設(shè)定適當(dāng)之地址及Port(1024至U5000之間的值)。此后可以調(diào)用getsockname()函數(shù)來(lái)獲知其被設(shè)定的值。(4)監(jiān)聽(tīng)當(dāng)服務(wù)器端的Socket對(duì)象綁定完成之后,服務(wù)器端必須建立一個(gè)監(jiān)聽(tīng)的隊(duì)列來(lái)接收客戶端的連接請(qǐng)求。list
57、en()函數(shù)使服務(wù)器端的Socket進(jìn)入監(jiān)聽(tīng)狀態(tài),并設(shè)定可以建立的最大連接數(shù)(目前最大值限制為5,最小值為1)。該函數(shù)調(diào)用成功返回0,否則返回SOCKET_ERROR。intPASCALFARlisten(SOCKETs,intbacklog);參數(shù):s:需要建立監(jiān)聽(tīng)的Socket;backlog:最大連接個(gè)數(shù);服務(wù)器端的Socket調(diào)用完listen()后,如果此時(shí)客戶端調(diào)用connect()函數(shù)提出連接申請(qǐng)的話,Server端必須再調(diào)用accept()函數(shù),這樣服務(wù)器端和客戶端才算正式完成通信程序的連接動(dòng)作。為了知道什么時(shí)候客戶端提出連接要求,從而服務(wù)器端的Socket在恰當(dāng)?shù)臅r(shí)候調(diào)用accept)函數(shù)完成連接的建立,我們就要使用WSAAsyncSelect()函數(shù),讓系統(tǒng)主動(dòng)來(lái)通知我們有客戶端提出連接請(qǐng)求了。該函數(shù)調(diào)用成功返回0,否貝U返回SOCKET_ERROR。intPASCALFARWSAAsyncSelect(SOCKETs,HWNDhWnd,unsi
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020-2025年中國(guó)紐甜行業(yè)發(fā)展趨勢(shì)預(yù)測(cè)及投資戰(zhàn)略咨詢報(bào)告
- 中國(guó)IA服務(wù)器市場(chǎng)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 2023-2028年中國(guó)茯苓種植行業(yè)市場(chǎng)深度分析及投資策略咨詢報(bào)告
- 中國(guó)直流無(wú)刷電機(jī)行業(yè)市場(chǎng)全景評(píng)估及發(fā)展戰(zhàn)略研究報(bào)告
- 廣東羥甲基丙烯酰胺 項(xiàng)目申請(qǐng)報(bào)告
- 中國(guó)實(shí)驗(yàn)柜行業(yè)市場(chǎng)發(fā)展現(xiàn)狀及投資戰(zhàn)略咨詢報(bào)告
- 薄膜太陽(yáng)能電池項(xiàng)目節(jié)能評(píng)估報(bào)告(節(jié)能專用)
- 2025年中國(guó)鐵道及電車道枕木行業(yè)市場(chǎng)調(diào)查研究及投資前景預(yù)測(cè)報(bào)告
- 中國(guó)帶底盆磨砂花盆行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告(2024-2030)
- 中國(guó)EDI超純水系統(tǒng)行業(yè)市場(chǎng)調(diào)研及投資戰(zhàn)略研究報(bào)告
- 疏通馬桶下水道培訓(xùn)課件
- 大邑蓄水池清淤施工方案
- 2024-2025學(xué)年高中物理 第四章 光的折射 1 光的折射定律說(shuō)課稿1 教科版選修3-4
- 2025年度尿素肥料采購(gòu)合同范本及環(huán)保要求解析3篇
- 職業(yè)發(fā)展計(jì)劃和個(gè)人成長(zhǎng)
- 溶洞相關(guān)知識(shí)培訓(xùn)課件
- 材料設(shè)備進(jìn)場(chǎng)計(jì)劃及保證措施
- 【大學(xué)課件】道路工程測(cè)量2
- 機(jī)械加工價(jià)格表
- 新材料在綠色制造中的應(yīng)用及發(fā)展趨勢(shì)分析
- 醫(yī)用耗材采購(gòu)風(fēng)險(xiǎn)管理工作總結(jié)
評(píng)論
0/150
提交評(píng)論