版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 本科畢業(yè)設(shè)計(jì)</b></p><p><b> ?。?0 屆)</b></p><p> 網(wǎng)絡(luò)實(shí)時(shí)文件傳輸軟件的開發(fā)</p><p> 所在學(xué)院 </p><p> 專業(yè)班級 通信工程
2、 </p><p> 學(xué)生姓名 學(xué)號 </p><p> 指導(dǎo)教師 職稱 </p><p> 完成日期 年 月 </p><p><b> 摘 要</b><
3、;/p><p> 當(dāng)前中國的互聯(lián)網(wǎng)技術(shù)已經(jīng)進(jìn)入了一個(gè)飛速發(fā)展的時(shí)期,即時(shí)通訊工具作為當(dāng)今網(wǎng)絡(luò)應(yīng)用的主流,越來越受到了人們的青睞,使人們的網(wǎng)上生活更加豐富多彩?,F(xiàn)在人們開發(fā)了越來越多的軟件使文件傳輸再也不用像以前那么麻煩,它既方便又快捷,能為人們省下很多寶貴的時(shí)間。本畢業(yè)設(shè)計(jì)就是開發(fā)了一個(gè)網(wǎng)絡(luò)實(shí)時(shí)文件傳輸?shù)能浖?lt;/p><p> 本設(shè)計(jì)的開發(fā)采用C/S結(jié)構(gòu),在基于C++ Builder開發(fā)
4、環(huán)境下,使用C++編程語言進(jìn)行開發(fā)。本文首先論述了現(xiàn)今傳輸軟件的發(fā)展方向,并對開發(fā)環(huán)境和開發(fā)的主要內(nèi)容進(jìn)行了簡單的介紹。本設(shè)計(jì)所開發(fā)的軟件是基于TCP/IP協(xié)議,論文中也介紹了TCP/IP協(xié)議和FTP的一些相關(guān)知識。本文還論述了線程的概念、優(yōu)缺點(diǎn)以及在C++ Builder中的實(shí)現(xiàn),重點(diǎn)介紹了軟件的開發(fā)思路和程序中關(guān)鍵代碼的解析。通過運(yùn)行、測試與分析,該軟件運(yùn)行穩(wěn)定、可靠,具有一定的實(shí)用價(jià)值。</p><p>
5、 關(guān)鍵詞:C++ Builder;TCP/IP協(xié)議;實(shí)時(shí)文件傳輸</p><p><b> Abstract</b></p><p> Nowadays, China's Internet technology has already entered a rapid development times, instant messaging tools as
6、 the mainstream of network application, which causes people's online life to be more richly colorful, and has also received people's favors simultaneously. Now people developed more and more software makes file t
7、ransfers easier, it is so convenient and fast, help people save a lot of precious time. This graduation project is to develop a software of real time file transfer on network.</p><p> The development of thi
8、s design useing C/S structure based on C++ Builder, by the use of C++ programming language development. This article first discusses the current direction of transmission of software development, and introduced the devel
9、opment environment and the primary contents of the development. This design software is based on TCP/IP protocol, and also introduces the TCP/IP protocol and some relevant knowledge of FTP. This article also discusses th
10、e concept of thread, the advantages an</p><p> Key Words:C++ Builder;TCP/IP protocol;real-time file transfers</p><p><b> 目 錄</b></p><p><b> 1 概 述1</b>&
11、lt;/p><p> 1.1 課題研究背景及意義1</p><p> 1.2 研究工作和論文內(nèi)容1</p><p> 2 TCP/IP技術(shù)與FTP文件傳輸3</p><p> 2.1 TCP/IP特點(diǎn)3</p><p> 2.2 TCP/IP協(xié)議體系結(jié)構(gòu)3</p><p>
12、2.3 TCP/IP傳輸文件機(jī)制5</p><p> 2.4 FTP文件傳輸知識5</p><p><b> 3 線程7</b></p><p> 3.1 線程的概念.7</p><p> 3.2 使用線程的優(yōu)缺點(diǎn)7</p><p> 3.3 線程在C++ Builder中的
13、實(shí)現(xiàn)7</p><p> 4 文件傳輸?shù)膶?shí)現(xiàn)10</p><p> 4.1 總體方案10</p><p> 4.2 C++ Builder開發(fā)環(huán)境10</p><p> 4.3 用于文件傳輸?shù)慕M件11</p><p> 4.4 文件傳輸協(xié)議12</p><p> 4.5
14、 文件傳輸軟件設(shè)計(jì)13</p><p> 4.5.1 設(shè)計(jì)思路13</p><p> 4.5.2 軟件界面框架構(gòu)建13</p><p> 4.5.3 關(guān)鍵代碼分析15</p><p> 5 軟件運(yùn)行與結(jié)果20</p><p> 5.1 運(yùn)行情況20</p><p> 5
15、.2 有待開發(fā)的地方23</p><p><b> 6 結(jié) 論24</b></p><p><b> 致 謝25</b></p><p><b> 參考文獻(xiàn)26</b></p><p> 附錄1 主要源程序代碼27</p><p>
16、; 附錄2 畢業(yè)設(shè)計(jì)作品說明書41</p><p><b> 1 概述</b></p><p> 1.1 課題研究背景及意義</p><p> 網(wǎng)絡(luò)是一個(gè)激動(dòng)人心的領(lǐng)域,編寫網(wǎng)絡(luò)上的應(yīng)用程序更是很多程序員所向往的,然而編寫網(wǎng)絡(luò)程序需要掌握大量的網(wǎng)絡(luò)傳輸協(xié)議、編程接口和WinSock32 API函數(shù)。20世紀(jì)90年代以來,計(jì)算機(jī)網(wǎng)絡(luò)
17、技術(shù)和信息處理技術(shù)在全世界范圍得到了迅猛發(fā)展,基于TCP/IP協(xié)議的文件傳輸和即時(shí)聊天系統(tǒng)迅速成為數(shù)據(jù)通信網(wǎng)絡(luò)上最常用的的應(yīng)用。</p><p> 隨著Internet和局域網(wǎng)的飛速發(fā)展和普及,越來越多的企業(yè)、事業(yè)單位和學(xué)校都已經(jīng)建成局域網(wǎng)并接上了Internet。在局域網(wǎng)或Internet上很需要一些軟件能夠很方便快捷地實(shí)現(xiàn)互相發(fā)送信息和傳送文件等功能?,F(xiàn)在用戶可以通過QQ、MSN、郵箱、FTP等傳送文件,不
18、過對于需要傳送容量比較大的文件就有些費(fèi)時(shí)。</p><p> 本課題所要完成的是用C++ Builder設(shè)計(jì)一個(gè)基于TCP/IP協(xié)議的點(diǎn)對點(diǎn)的文件發(fā)送和接收。和FTP相比,我所要設(shè)計(jì)的軟件不需要服務(wù)器,直接點(diǎn)對點(diǎn)傳輸,安全性高,如果加密的話就算文件在傳輸?shù)臅r(shí)候被截,別人也看不到正確的內(nèi)容,只有接受方解密后才能閱讀。該軟件既節(jié)省了網(wǎng)絡(luò)帶寬又提高了傳輸速度,給網(wǎng)絡(luò)用戶帶來了很大的方便。</p><
19、;p> 1.2 研究開發(fā)和論文內(nèi)容</p><p> 1、開發(fā)工作主要內(nèi)容</p><p> 利用C++ Builder設(shè)計(jì)一個(gè)軟件,能夠?qū)崿F(xiàn)文件實(shí)時(shí)點(diǎn)對點(diǎn)發(fā)送與接收。設(shè)計(jì)中進(jìn)行建立Socket連接,首先需要設(shè)置IP地址然后打開服務(wù)器開始偵聽。當(dāng)服務(wù)器與客戶端連接上之后才能發(fā)送文件,如果服務(wù)器未開始偵聽或者未連上服務(wù)器,則彈出提示框“網(wǎng)絡(luò)故障,請檢查服務(wù)器是否打開?”。當(dāng)客戶端
20、與服務(wù)器成功連接后,可以由客戶端向服務(wù)器發(fā)送文件,也可以由服務(wù)器向客戶端發(fā)送文件,然后點(diǎn)擊文件發(fā)送的按鈕,就能成功的接收到文件,并彈出一個(gè)提示框提示用戶表明文件發(fā)送成功,然后還能在顯示文本處顯示出文件發(fā)送過程中一系列的內(nèi)容。</p><p> 為實(shí)現(xiàn)以上內(nèi)容,主要需要對TCP/IP協(xié)議、C++ Builder開發(fā)平臺(tái)、界面開發(fā)以及Socket編程進(jìn)行研究。</p><p><b&g
21、t; 2、論文內(nèi)容</b></p><p> 論文分成六章來介紹在C++ Builder平臺(tái)下網(wǎng)絡(luò)實(shí)時(shí)文件傳輸軟件的開發(fā),從開發(fā)所需要的相關(guān)知識到開發(fā)的方案以及開發(fā)過程都有所涉及。第一章概述介紹了本課題的背景、意義和研究開發(fā)的主要內(nèi)容。第二章介紹了TCP/IP技術(shù)與FTP文件傳輸,主要介紹了TCP/IP協(xié)議的相關(guān)知識和FTP相關(guān)知識。第三章為線程,介紹了線程的概念、使用線程的優(yōu)缺點(diǎn)和在C++ Bu
22、ilder中的實(shí)現(xiàn)。第四章是總體的方案和C++ Builder開發(fā)平臺(tái),重點(diǎn)介紹了軟件開發(fā)的思路以及程序中關(guān)鍵代碼的解析。第五章給出了軟件的運(yùn)行結(jié)果,同時(shí)講述了本次設(shè)計(jì)的不足的地方。最后一章為結(jié)論部分,對整個(gè)論文工作情況進(jìn)行總結(jié)。</p><p> 2 TCP/IP技術(shù)與FTP文件傳輸</p><p> 2.1 TCP/IP特點(diǎn)</p><p> 傳輸層協(xié)議
23、(TCP、UDP),網(wǎng)絡(luò)層協(xié)議(IP)和物理接口層是TCP/IP協(xié)議的核心部分,這三層通常是在操作系統(tǒng)內(nèi)核中實(shí)現(xiàn)。編程時(shí),編程界面有兩種形式:(1) 是由內(nèi)核心直接提供的系統(tǒng)調(diào)用;(2) 使用以庫函數(shù)方式提供的各種函數(shù)。前者為核內(nèi)實(shí)現(xiàn),后者為核外實(shí)現(xiàn)。用戶服務(wù)要通過核外的應(yīng)用程序才能實(shí)現(xiàn),所以要使用套接字(Socket)來實(shí)現(xiàn)[1]。</p><p> 2.2 TCP/IP協(xié)議體系結(jié)構(gòu)</p>&
24、lt;p> TCP/IP協(xié)議源于1969年,是針對Internet開發(fā)的一種體系結(jié)構(gòu)和協(xié)議標(biāo)準(zhǔn),目的在于解決異種計(jì)算機(jī)網(wǎng)絡(luò)的通信問題。使得網(wǎng)絡(luò)在互聯(lián)時(shí)能為用戶提供一種通用、一致的通信服務(wù)[2]。</p><p> 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所示。</p><
25、p> IP:網(wǎng)間協(xié)議(Internet Protocol),主要負(fù)責(zé)主機(jī)間數(shù)據(jù)的路由和網(wǎng)絡(luò)上數(shù)據(jù)的存儲(chǔ)。同時(shí)為ICMP、TCP、UDP提供分組發(fā)送服務(wù)。用戶進(jìn)程通常不需要涉及這一層。</p><p> RARP:反向地址解析協(xié)議(Reverse Address Resolution Protocol),此協(xié)議將硬件地址映射到網(wǎng)絡(luò)地址。</p><p> ARP:地址解析協(xié)議(A
26、ddress Resolution Protocol),此協(xié)議將網(wǎng)絡(luò)地址映射到硬件地址。</p><p> ICMP:網(wǎng)間報(bào)文控制協(xié)議(Internet Control Message Protocol),此協(xié)議處理信關(guān)和主機(jī)的差錯(cuò)和傳送控制。</p><p> UDP:用戶數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol),這是提供給用戶進(jìn)程的無連接協(xié)議,用于傳送數(shù)據(jù)而不執(zhí)行
27、正確性檢查。</p><p> TCP:傳送控制協(xié)議(Transmission Control Protocol),這是一種提供給用戶進(jìn)程的可靠的全雙工字節(jié)流面向連接的協(xié)議。它要為用戶進(jìn)程提供虛電路服務(wù),并為數(shù)據(jù)可靠傳輸建立檢查。(注:大多數(shù)網(wǎng)絡(luò)用戶程序使用TCP)</p><p> SMTP:簡單郵件傳送協(xié)議(Simple Mail Transfer Protocol),SMTP協(xié)議
28、為系統(tǒng)之間傳送電子郵件。</p><p> TELNET:終端協(xié)議(Telnet Terminal Procotol),允許用戶以虛終端方式訪問遠(yuǎn)程主機(jī)。</p><p> FTP:文件傳輸協(xié)議(File Transfer Protocol),允許用戶以文件操作的方式(文件的增、刪、改、查、傳送等)與另一主機(jī)相互通信。</p><p> HTTP:超文本傳輸協(xié)
29、議(Hypertext Transfer Procotol)</p><p> TFTP:簡單文件傳輸協(xié)議(Trivial File Transfer Protocol)</p><p> IP協(xié)議在每個(gè)包頭上加上接收端主機(jī)地址,這樣方便數(shù)據(jù)找到自己要去的地方,如果在傳輸過程中出現(xiàn)數(shù)據(jù)丟失、失真等情況,TCP協(xié)議會(huì)自動(dòng)要求數(shù)據(jù)重傳[3]。</p><p> T
30、CP/IP協(xié)議的基本傳輸單位是數(shù)據(jù)包(Datagram),TCP協(xié)議負(fù)責(zé)把數(shù)據(jù)分成若干個(gè)數(shù)據(jù)包,然后給每個(gè)數(shù)據(jù)包加上包頭,包頭上有相應(yīng)的編號,用以保證在數(shù)據(jù)接收端能將數(shù)據(jù)還原為原來的格式[4]。</p><p> 2.3 TCP/IP傳送文件機(jī)制</p><p> 物理層通過MAC地址向鏈路層傳送數(shù)據(jù)幀;鏈路層使用TYPE或DASP(Destination Service Access
31、 Point)識別IP協(xié)議;網(wǎng)絡(luò)層根據(jù)協(xié)議號識別TCP或UDP;傳輸層經(jīng)端口號訪問各種應(yīng)用服務(wù)[5],如圖2-2所示。</p><p> 2.4 FTP文件傳送知識</p><p> FTP協(xié)議(File Transfer Protocol)是互聯(lián)網(wǎng)的主要傳輸機(jī)制,它能夠?qū)崿F(xiàn)在不同的計(jì)算機(jī)、不同的操作系統(tǒng)、不同的網(wǎng)絡(luò)之間進(jìn)行文件傳輸。從根本上說,F(xiàn)TP就是在網(wǎng)絡(luò)中各種不同的計(jì)算機(jī)之間按
32、照TCP/IP協(xié)議來傳輸文件。FTP的主要作用就是讓用戶連接上一個(gè)遠(yuǎn)程計(jì)算機(jī)(這些計(jì)算機(jī)上運(yùn)行著FTP服務(wù)器程序)察看遠(yuǎn)程計(jì)算機(jī)有哪些文件,然后把本地計(jì)算機(jī)的文件送到遠(yuǎn)程計(jì)算機(jī)上去,或把文件從遠(yuǎn)程計(jì)算機(jī)上拷到本地計(jì)算機(jī)。</p><p> FTP采用的也是現(xiàn)在流行的C/S(客戶機(jī)/服務(wù)器)模式,由FTP客戶端程序和FTP服務(wù)器端程序組成。通常服務(wù)器是遠(yuǎn)程站點(diǎn),用戶可以通過Internet網(wǎng)絡(luò)連接到遠(yuǎn)程的FTP服
33、務(wù)器站點(diǎn)。當(dāng)然并非所有的站點(diǎn)用戶都有權(quán)限訪問,有些服務(wù)器需要用戶有一定的訪問權(quán)限。FTP站點(diǎn)可以是公共的,任何能連接上Internet的人都能夠訪問;也可以是私有的,當(dāng)然這個(gè)時(shí)候就必須具備一定的權(quán)限,比如有相應(yīng)的用戶名和密碼;或者是兩種性質(zhì)都有,這時(shí)可能能訪問和操作其中的一部分內(nèi)容[6]。</p><p> 用戶通過客戶機(jī)程序向服務(wù)器程序發(fā)出命令,服務(wù)器程序執(zhí)行用戶所發(fā)出的命令,并將執(zhí)行的結(jié)果返回到客戶機(jī)。以下
34、載文件為例,當(dāng)你啟動(dòng)FTP從遠(yuǎn)程計(jì)算機(jī)拷貝文件時(shí)實(shí)際上啟動(dòng)了兩個(gè)程序:一個(gè)本地機(jī)上的FTP客戶程序,它向FTP服務(wù)器提出拷貝文件的請求。另一個(gè)是啟動(dòng)在遠(yuǎn)程計(jì)算機(jī)的上的FTP服務(wù)器程序,它響應(yīng)你的請求把你指定的文件傳送到你的計(jì)算機(jī)中。</p><p> 使用FTP時(shí)必須先登錄,在遠(yuǎn)程主機(jī)上獲得相應(yīng)的權(quán)限以后,方可下載或上傳文件。FTP服務(wù)器可以進(jìn)行各種設(shè)置,比如有些目錄讀寫刪除屬性等。像現(xiàn)在許多公共的FTP站點(diǎn)都
35、會(huì)有幾種權(quán)限的目錄,一種是讓用戶下載,除此之外,用戶不能進(jìn)行其他的操作,如“/public”等;而有些是讓用戶上傳或者刪除的,如“/incoming”等。對于一些公共的FTP站點(diǎn),不管在服務(wù)器端有沒有賬號都能夠下載文件,這就被稱為“匿名(Anonymous)FTP”。當(dāng)連接到一個(gè)匿名服務(wù)器的時(shí)候,通常指定“anonymous”作為用戶名,以“guest”或者電子郵件作為密碼[6]。</p><p> 當(dāng)遠(yuǎn)程主機(jī)
36、提供匿名FTP服務(wù)時(shí),作為一種安全措施,大多數(shù)匿名FTP主機(jī)都允許用戶從其下載文件,而不允許用戶向其上傳文件,即使有些匿名FTP主機(jī)確實(shí)允許用戶上傳文件,用戶也只能將文件上傳至某一指定上傳目錄中。隨后,系統(tǒng)管理員會(huì)去檢查這些文件,他會(huì)將這些文件移至另一個(gè)公共下載目錄中,供其他用戶下載,利用這種方式,遠(yuǎn)程主機(jī)的用戶得到了保護(hù),避免了有人上傳有問題的文件,如帶病毒的文件[7]。</p><p><b>
37、3 線程</b></p><p><b> 3.1 線程的概念</b></p><p> 線程是計(jì)算機(jī)中獨(dú)立運(yùn)行的最小單位,運(yùn)行時(shí)占用很少的系統(tǒng)資源。由于每個(gè)線程占用的CPU時(shí)間是由系統(tǒng)分配的,因此可以把線程看成操作系統(tǒng)分配CPU時(shí)間的基本單位。在用戶看來,多個(gè)線程是同時(shí)執(zhí)行的,但從操作系統(tǒng)調(diào)度上看,各個(gè)線程是交替執(zhí)行的。系統(tǒng)不停地在各個(gè)線程之間切換
38、,每個(gè)線程只有在系統(tǒng)分配給它的時(shí)間片內(nèi)才能取得CPU的控制權(quán),執(zhí)行線程中的代碼[6]。在系統(tǒng)中,正確使用線程能夠很好的提高應(yīng)用程序的性能及運(yùn)行效率,實(shí)現(xiàn)原理是將一個(gè)進(jìn)程分成多個(gè)線程,然后讓它們并發(fā)異步執(zhí)行,來提高效率。</p><p> 3.2 使用線程的優(yōu)缺點(diǎn)</p><p> 使用線程的缺點(diǎn):(1) 跟蹤大量的線程將占用大量的處理器的時(shí)間。如果線程過多,則其中大多數(shù)線程都不會(huì)產(chǎn)生明
39、顯的進(jìn)度。如果大多數(shù)當(dāng)前線程處于一個(gè)進(jìn)程中,則其他進(jìn)程中的線程的調(diào)度頻率就會(huì)很低;(2) 使用許多線程控制代碼執(zhí)行非常復(fù)雜,并可能產(chǎn)生許多錯(cuò)誤;(3) 銷毀線程需要了解可能發(fā)生的問題并對那些問題進(jìn)行處理。</p><p> 引入線程的好處:(1) 創(chuàng)建一個(gè)新線程花費(fèi)的時(shí)間少;(2) 兩個(gè)線程的切換時(shí)間少;(3) 由于同一個(gè)進(jìn)程內(nèi)的線程共享內(nèi)存和文件,所以線程之間互相通信必須調(diào)用內(nèi)核;(4) 線程能獨(dú)立執(zhí)行,能充
40、分利用和發(fā)揮處理機(jī)與外圍設(shè)備并行工作的能力。</p><p> 3.3 線程在C++ Builder中的實(shí)現(xiàn)</p><p> 一個(gè)應(yīng)用程序,在需要的時(shí)候可以有許多個(gè)執(zhí)行線程,每個(gè)線程就是一個(gè)小的執(zhí)行程序,操作系統(tǒng)自動(dòng)使各個(gè)線程共享CPU資源,確保任一線程都不能使系統(tǒng)死鎖。這樣,在編程的時(shí)候,可以把費(fèi)時(shí)間的任務(wù)移到后臺(tái),在前臺(tái)用另一個(gè)線程接受用戶的輸入。對那些對實(shí)時(shí)性要求比較高的編程任
41、務(wù),如網(wǎng)絡(luò)客戶服務(wù)、串行通信等應(yīng)用時(shí),多線程的實(shí)現(xiàn)無疑大大地增強(qiáng)了程序的可用性和穩(wěn)固性。</p><p> 線程同進(jìn)程一樣是實(shí)現(xiàn)Windows系統(tǒng)多任務(wù)的一種重要機(jī)制,提供了進(jìn)行多任務(wù)處理的能力。任何一個(gè)進(jìn)程在被創(chuàng)建后都必須同時(shí)啟動(dòng)一個(gè)主線程,也就是說一個(gè)進(jìn)程至少要擁有一個(gè)線程。線程只能存在于某個(gè)進(jìn)程環(huán)境中,其生命周期也被限制在其內(nèi),一旦進(jìn)程終止,它所包含的全部線程也將同時(shí)被撤銷[8]。使用線程所帶來的最大優(yōu)勢
42、是可以充分利用CPU資源并大幅度提升程序的并行處理能力。</p><p><b> 1、創(chuàng)建多線程程序</b></p><p> 首先,先介紹一下實(shí)現(xiàn)多線程的具體步驟。在C++ Builder中雖然用Tthread對象說明了線程的概念,但是Tthread對象本身并不完整,需要在TThread下新建其子類,并重載Execute方法來使用線程對象。</p>
43、<p> 在C++ Builder IDE環(huán)境下選擇菜單File|New,在New欄中選中Thread Object,按OK,接下來彈出輸入框,輸入TThread對象子類的名字MyThread,這樣C++ Builder自動(dòng)為你創(chuàng)建了一個(gè)名為TMyThread的TThread子類。同時(shí)編輯器中多了一個(gè)名為Unit2.cpp的單元,如下就是我們創(chuàng)建的TMyThread子類的原代碼:</p><p>
44、 #pragma hdrstop</p><p> #include "Unit2.h"</p><p> #pragma package(smart_init)</p><p> //-------------------------------------------------------------------------<
45、/p><p> // Important: Methods and properties of objects in VCL can only be</p><p> // used in a method called using Synchronize, for example:</p><p> // Synchronize(UpdateC
46、aption);</p><p> // where UpdateCaption could look like:</p><p> // void __fastcall MyThread::UpdateCaption()</p><p><b> // {</b></p><p> //
47、 Form1->Caption = "Updated in a thread";</p><p><b> // }</b></p><p> //-------------------------------------------------------------------------</p>
48、<p> __fastcall MyThread:: MyThread(bool CreateSuspended)</p><p> : TThread(CreateSuspended)</p><p><b> {</b></p><p><b> }</b></p><p>
49、 //-------------------------------------------------------------------------</p><p> void __fastcall MyThread::Execute()</p><p><b> {</b></p><p> //---- Place thread
50、 code here ----</p><p><b> }</b></p><p> //-------------------------------------------------------------------------</p><p> 其中的Execute()函數(shù)就是我們要在線程中實(shí)現(xiàn)的任務(wù)的代碼所在處。在原代碼中包
51、含Unit2.cpp,這個(gè)由我們創(chuàng)建的TMyThread對象就可以使用了。</p><p> 以上初步地實(shí)現(xiàn)了在程序中創(chuàng)建一個(gè)自定義的線程,并使程序?qū)崿F(xiàn)了多線程應(yīng)用。但是,多線程應(yīng)用的實(shí)現(xiàn),并不是一件簡單的工作,還需要考慮很多使多個(gè)線程能在系統(tǒng)中共存、互不影響的因素。比如,程序中公共變量的訪問、資源的分配,如果處理不當(dāng),不僅線程會(huì)死鎖陷入混亂,甚至可能會(huì)造成系統(tǒng)崩潰。總的來講,在多線程編程中要注意共享對象和數(shù)據(jù)
52、的處理,不能忽視。</p><p> 2、線程同步的三種實(shí)現(xiàn)方法</p><p> (1) 利用互斥對象實(shí)現(xiàn);互斥對象(mutex)屬于內(nèi)核對象,它能夠確保線程擁有對單個(gè)資源的互斥訪問權(quán)?;コ鈱ο蟀粋€(gè)使用數(shù)量,一個(gè)線程ID和一個(gè)計(jì)數(shù)器。(2) 利用事件對象實(shí)現(xiàn);事件對象也屬于內(nèi)核對象,它包含三個(gè)成員:使用計(jì)數(shù)、指明該事件是自動(dòng)重置事件還是人工重置事件的標(biāo)志位、指明該事件處于已通知狀
53、態(tài)還是未通知狀態(tài)的標(biāo)志位。(3) 利用關(guān)鍵代碼段實(shí)現(xiàn);關(guān)鍵代碼段也稱為臨界區(qū),工作在用戶方式下。它是指一小段代碼段,在代碼能夠執(zhí)行前,它必須獨(dú)占對某些資源的訪問權(quán)[9]。</p><p> 多線程是為了使得多個(gè)線程并行的工作以完成多項(xiàng)任務(wù),以提高系統(tǒng)的效率。線程是在同一時(shí)間需要完成多項(xiàng)任務(wù)的時(shí)候被實(shí)現(xiàn)的。</p><p> 4 文件傳輸?shù)膶?shí)現(xiàn)</p><p>
54、<b> 4.1 總體方案</b></p><p> 本次課題的目標(biāo)是設(shè)計(jì)一個(gè)網(wǎng)絡(luò)實(shí)時(shí)文件傳輸?shù)能浖?。編程中需要建立一個(gè)客戶端和一個(gè)服務(wù)器端,兩者可以互傳文件。首先,在客戶端和服務(wù)器端各創(chuàng)建一個(gè)主線程mySndFileThread和一個(gè)文件發(fā)送線程TSndFileThread,在程序執(zhí)行時(shí)由主線程調(diào)用文件發(fā)送線程。打開一個(gè)文件,先計(jì)算出發(fā)送的文件長度,然后顯示出文件打開的路徑。發(fā)送端將要
55、傳送的文件分成指定大小的N個(gè)包,在每個(gè)包前加個(gè)包頭,因?yàn)榉?wù)器需要通過包頭知道傳送過來的是數(shù)據(jù)還是路徑(因?yàn)榭蛻舳酥付ù娣怕窂剑?,接收端收到?shù)據(jù)后必須返回確認(rèn)到發(fā)送端,這樣才能循環(huán)發(fā)送,但一定要有最后的終止,不然會(huì)死循環(huán)[10]。然后定義文件包的傳輸長度byte bTmpDataBuf[4096];每次傳送文件的長度為4096,最后一個(gè)包可能會(huì)小于4096,接收端對應(yīng)于顯示首次接收字節(jié)數(shù)、包頭、名稱、本次接收文件的長度等。最后文件發(fā)送成
56、功則彈出一個(gè)提示框顯示接收到的字節(jié)和保存路徑。相應(yīng)地,基于Socket編程的可靠性,服務(wù)器也能向客戶端發(fā)送文件。</p><p> 與FTP相比,本軟件不需要服務(wù)器,直接點(diǎn)對點(diǎn)傳輸,而且安全性比較高,如果加密的話就算被截,別人也看不到正確的內(nèi)容,只有接收方解密后才能閱讀。</p><p> 4.2 C++ Builder開發(fā)環(huán)境</p><p> 本畢業(yè)設(shè)計(jì)的
57、軟件開發(fā)使用到C++編程語言,借助C++ Builder6開發(fā)工具來實(shí)現(xiàn),操作系統(tǒng)是Microsoft Windows XP。</p><p> Borland C++ Builder是Borland公司推出的全新32位Windows開發(fā)工具。C++ Builder不僅繼承了Delphi使用簡便,功能強(qiáng)大,效率高等特點(diǎn),而且它還結(jié)合C++語言所有優(yōu)點(diǎn)。C++ Builder可以說是至今最好的Windows開發(fā)工
58、具。C++ Builder6是一款快速開發(fā)Win32應(yīng)用程序的可視化開發(fā)工具,利用它可以實(shí)現(xiàn)高性能執(zhí)行效率和出色的底層控制[11]。C++ Builder6相比于以前的版本,提供了更多的網(wǎng)絡(luò)開發(fā)組件,更快速方便的可視化環(huán)境。</p><p> C++ Builder6集成開發(fā)環(huán)境包含可視化窗體設(shè)計(jì)器,對象觀察器、組件面板、工程管理器、源代碼編輯器、調(diào)試程序以及安裝工具等。在該窗體設(shè)計(jì)器中,你可以自由地移動(dòng)可視化
59、表示的對象,同時(shí)在對象觀察器中編輯該對象的初始化運(yùn)行時(shí)狀態(tài),在源代碼編輯器中編輯該對象執(zhí)行的邏輯。改變對象與代碼有關(guān)聯(lián)的屬性,比如改變事件句柄的名字時(shí),對象觀察器會(huì)自動(dòng)地改變相應(yīng)的源代碼。另外,在源代碼編輯器中更改該對象的源代碼,比如在窗體類聲明中改變事件句柄的名字時(shí),對象觀察器也會(huì)立即反映出相應(yīng)的變化[12]。圖4-1是C++ Builder6的設(shè)計(jì)界面。</p><p> 圖4-1 C++ Builder
60、6設(shè)計(jì)界面</p><p> 4.3 用于文件傳輸?shù)慕M件</p><p> 本次設(shè)計(jì)分為客戶端和服務(wù)器兩個(gè)部分。</p><p> 1、客戶端用到的組件</p><p> 建立兩個(gè)窗體Form,把Form1和Form3的Caption分別改為現(xiàn)場文件服務(wù)系統(tǒng)和IP設(shè)置。向窗體Form1中添加的控件有:一個(gè)Memo控件、兩個(gè)Button
61、控件、一個(gè)ClientSocket控件、一個(gè)OpenDialog控件、一個(gè)PopupMenu控件和一個(gè)StausBar控件。向窗體Form3添加的控件有:兩個(gè)Button控件、一個(gè)Label控件和一個(gè)Edit控件。</p><p> 2、服務(wù)器端用到的組件</p><p> 建立一個(gè)窗體Form1,將其Caption改為中心文件服務(wù)系統(tǒng)。向窗體Form1中添加的控件有:一個(gè)Memo控件
62、、兩個(gè)Button控件、一個(gè)ServerSocket控件、一個(gè)OpenDialog控件和一個(gè)StausBar控件。</p><p> 4.4 文件傳輸協(xié)議</p><p> 通信協(xié)議是指通信雙方的一種約定。約定包括對數(shù)據(jù)格式、同步方式、傳送速度、傳送步驟、檢糾錯(cuò)方式以及控制字符定義等問題做出統(tǒng)一規(guī)定,通信雙方必須共同遵守[13]。</p><p> 在編程中如
63、何實(shí)現(xiàn)文件的數(shù)據(jù)傳輸呢?把文件分成兩個(gè)部分,頭文件包括文件大小、文件名、文件名長度,后一部分為文件的內(nèi)容,程序中先發(fā)送頭文件。然后把文件拆分成N個(gè)包,每個(gè)包數(shù)據(jù)為4096字節(jié)[14]。在內(nèi)存中數(shù)據(jù)是用十六進(jìn)制保存的,也就是說一字節(jié)數(shù)據(jù)可表示的范圍是00~FF,它的十進(jìn)制表示是0~255。</p><p> 程序中用iSndFileLength=FileSeek(iSndFileHandle,0,2);獲取文件的
64、長度,F(xiàn)ileHandle是文件句柄。句柄實(shí)際就是結(jié)構(gòu)體指針,但系統(tǒng)不允許你直接訪問該結(jié)構(gòu)體成員,所以稱其為“句柄”,只應(yīng)該用專門的處理函數(shù)取操作該句柄,而不是應(yīng)該直接訪問結(jié)構(gòu)體成員。舉個(gè)例子:如果你想讀一個(gè)文件的內(nèi)容,首先通過一個(gè)findfile(“文件名”)的函數(shù)找到那個(gè)文件,這個(gè)函數(shù)就給你一個(gè)關(guān)于這個(gè)文件名的句柄,就是相當(dāng)于使用權(quán)限,你以后讀、寫或刪除這個(gè)文件的時(shí)候都要告訴系統(tǒng),你有這個(gè)權(quán)限操作這個(gè)文件。FileSeek()函數(shù)中
65、0=文件頭,2=文件尾。計(jì)算出文件的總長度,然后按照每個(gè)包4096字節(jié)發(fā)送,每發(fā)完一次文件指針就會(huì)指向下一個(gè)包要發(fā)送的文件頭依次類推,最后一個(gè)包可能會(huì)小于4096。</p><p> 圖4-2 文件傳輸協(xié)議</p><p> 如圖4-2,前面四個(gè)FF表示存放頭文件的大小、文件名、文件名長度等字節(jié)數(shù),F(xiàn)F實(shí)際表示是兩位的16進(jìn)制最大值。假如前四個(gè)大小依次為20,20,10,50,其長度
66、為20+20*256+10*256*256+50*256*256*256,其后的文件內(nèi)容字節(jié)數(shù)依次類推。在接收端也對應(yīng)于發(fā)送端,每次發(fā)送多少字節(jié)就接收多少字節(jié)。</p><p> 4.5 文件傳輸軟件設(shè)計(jì)</p><p> 4.5.1 設(shè)計(jì)思路</p><p> 本次設(shè)計(jì)是網(wǎng)絡(luò)實(shí)時(shí)文件傳輸軟件的開發(fā),程序的設(shè)計(jì)思路大致如下:先建立客戶端和服務(wù)器端,打開服務(wù)器開
67、始偵聽,雙擊窗體Form1中的Button1控件,在彈出的代碼窗口中的Button1Click()事件中添加代碼。然后在客戶端設(shè)置好IP后與服務(wù)器連接。客戶端和服務(wù)器的StatusBar->Panels->Items[0]的文本顯示為“本地IP地址:...”,Items[1]提示為“尚未連接”。連接上服務(wù)器后Items[1]提示為“已經(jīng)被......連接上”。單擊發(fā)送文件按鈕打開選擇一個(gè)文件由客戶端向服務(wù)器發(fā)送文件,服務(wù)器能
68、接收到文件,彈出一個(gè)提示框表明文件發(fā)送完成。在服務(wù)器的Memo1中會(huì)顯示發(fā)送文件的長度、文件名、文件打開路徑、本次接收字節(jié)、保存路徑等內(nèi)容。也可以由服務(wù)器向客戶端發(fā)送文件,操作步驟與客戶端發(fā)送文件一致。當(dāng)發(fā)送完成不需要發(fā)送文件時(shí),再在服務(wù)器的Button1Click()事件中添加代碼ServerSocket1->Socket->Close();關(guān)閉服務(wù)器斷開連接,也可以關(guān)閉客戶端斷開連接。</p><p&
69、gt; 4.5.2 軟件界面框架構(gòu)建</p><p><b> 1、客戶端界面</b></p><p> 運(yùn)行C++ Builder6,創(chuàng)建一個(gè)窗體Form3將其Caption改為“IP設(shè)置”。所需的控件:兩個(gè)Button控件、一個(gè)Label控件和一個(gè)Edit控件。將Label控件的Caption設(shè)置為“輸入中心IP地址:”。Edit控件可以顯示少量文本信息,設(shè)
70、置其Text為一個(gè)IP地址,如61.153.150.57。然后分別設(shè)置Button1和Button2控件的Caption為“確定”和“取消”。</p><p> 創(chuàng)建一個(gè)窗體Form1將其Caption設(shè)置為“現(xiàn)場文件服務(wù)系統(tǒng)”。所需的控件:一個(gè)Memo控件、兩個(gè)Button控件、一個(gè)ClientSocket控件、一個(gè)OpenDialog控件、一個(gè)PopupMenu控件和一個(gè)StausBar控件。Memo1控件
71、是用來顯示文本的,文件傳輸過程的內(nèi)容將顯示在其中。選中它之后,在對象檢視器里設(shè)置它的屬性。這里需要修改的屬性是ScrollBars,把ScrollBars屬性項(xiàng)設(shè)置成ssVertical,使Memo1在顯示文本的時(shí)候有垂直滾動(dòng)條。StausBar控件用以顯示程序的運(yùn)行狀況,單擊Panels屬性項(xiàng)右端的“…”按鈕,在彈出的對話框中添加兩個(gè)TStatusPanels,Items[0]的Text設(shè)置為“本地IP地址:”,Items[1]的Te
72、xt設(shè)置為“尚未連接”。然后分別設(shè)置Button1和Button2控件的Caption為“向中心發(fā)送文件”和“連接中心”。Button2控件其實(shí)就是單擊響應(yīng)事件,在這個(gè)程序里單擊它就能與服務(wù)器相連接。而OpenDialog1的作用是打開一個(gè)對話框,它被放在Button1單擊響應(yīng)事件中,用來在單擊事件發(fā)生后顯</p><p> 圖4-3 客戶端軟件界面</p><p><b>
73、 2、服務(wù)器端界面</b></p><p> 運(yùn)行C++ Builder6,創(chuàng)建一個(gè)窗體Form1將其Caption改為中心文件服務(wù)系統(tǒng)。所需的控件是:一個(gè)Memo控件、兩個(gè)Button控件、一個(gè)ServerSocket控件、一個(gè)OpenDialog控件和一個(gè)StausBar控件。分別設(shè)置Button1和Button3控件的Caption為“等待連接”和“向現(xiàn)場發(fā)送文件”。其他控件設(shè)置與客戶端一致
74、,最后程序界面如圖4-4所示。</p><p> 圖4-4 服務(wù)器端軟件界面</p><p> 4.5.3 關(guān)鍵代碼分析</p><p> 先在服務(wù)器端打開偵聽,單擊ServerSocket1,在Events的OnListen處雙擊,代碼窗口中會(huì)自動(dòng)生成一個(gè)該控件的基本程序框架。</p><p> void __fastcall T
75、Form1::ServerSocket1Listen(TObject *Sender,</p><p> TCustomWinSocket *Socket){ }</p><p> 通過在大括號內(nèi)編寫程序來實(shí)現(xiàn)偵聽功能,代碼如下:</p><p> Memo1->Lines->Append("中心開始偵聽...");</p
76、><p> 在客戶端設(shè)置IP,當(dāng)客戶端與服務(wù)器成功連接上之后,雙方就可以開始互相傳輸文件了。文件傳輸原理相同,這里介紹由客戶端向服務(wù)器傳輸文件。</p><p><b> 1、文件發(fā)送</b></p><p> 雙擊Button1控件,這里需要生成一個(gè)文件發(fā)送的線程TSndFileThread,由主線程mySndFileThread調(diào)用Tsn
77、dFileThread,代碼如下:</p><p> mySndFileThread=new TSndFileThread(true);</p><p> mySndFileThread->FreeOnTerminate=true;</p><p> mySndFileThread->Resume();</p><p>
78、創(chuàng)建一個(gè)文件發(fā)送線程,void __fastcall TSndFileThread::Execute(){ }</p><p> 在程序的開頭段定義一些全局變量:</p><p> unsigned int iSndFileHandle;</p><p> AnsiString sndFileName;</p><p> AnsiSt
79、ring sndFileName0;</p><p> unsigned int iSndFileLength;</p><p> 首先,打開文件需要一個(gè)對話框,才能選定要發(fā)送的文件。這里用到OpenDialog1控件,代碼如下:</p><p> if (Form1->OpenDialog1->Execute()){ }</p>
80、<p> 也就是說如果OpenDialog1存在的話,那么接著執(zhí)行下面的工作,在大括號里添加代碼如下:</p><p> Form1->Memo1->Lines->Append("\n\n=========================\n");</p><p> sndFileName=Form1->OpenDialog1-&
81、gt;FileName;</p><p> 文件打開成功后,先獲得其總長度并添加到Memo1中,代碼如下:</p><p> iSndFileLength = FileSeek(iSndFileHandle,0,2); //獲得文件長度</p><p> Form1->Memo1->Lines->Append("發(fā)送的文件
82、長度為:"+AnsiString (iSndFileLength));</p><p> 定義發(fā)送文件名的長度byte fileNameLen;用函數(shù)Length()計(jì)算出其長度,接著定義一個(gè)數(shù)組計(jì)算文件內(nèi)容的長度,代碼如下:</p><p> byte *sendHeadBuf=new byte[5+fileNameLen];</p><p> u
83、nsigned int k1,k2,k3;</p><p> k1=(iSndFileLength/256);</p><p> k2=(iSndFileLength/256)/256;</p><p> k3=(iSndFileLength/256)/256/256;</p><p> sendHeadBuf[4]=fileName
84、Len;</p><p> sendHeadBuf[3]=k3;</p><p> sendHeadBuf[2]=k2-k3*256;</p><p> sendHeadBuf[1]=k1-k2*256-k3*256*256;</p><p> sendHeadBuf[0]=iSndFileLength-k1*256-k2*256*2
85、56-k3*256*256*256;</p><p> 每次傳送文件的長度定義為4096個(gè)字節(jié)byte bTmpDataBuf[4096];每次傳送文件長度將會(huì)顯示傳送字節(jié)、下一個(gè)傳送的指針地址、文件總長度,代碼如下:</p><p> sndTmpPtr+=sndLen;</p><p> iSndFilePtr+=sndTmpPtr;</p>
86、<p> Form1->Memo1->Lines->Append("傳送文件長度為:"+AnsiString(sndTmpPtr)</p><p> +"/"+AnsiString(iSndFilePtr)+"/"+AnsiString(iSndFileLength));</p><p> 最后
87、關(guān)閉文件FileClose(iSndFileHandle);</p><p> 當(dāng)傳送文件結(jié)束時(shí),在Memo1上顯示如下內(nèi)容:</p><p> Form1->Memo1->Lines->Append("文件"+sndFileName0+"已經(jīng)發(fā)送完成!");</p><p> Form1->Me
88、mo1->Lines->Append("傳送文件結(jié)束,長度為:"+AnsiString (iSndFilePtr));</p><p> 設(shè)置按鍵1有效Form1->Button1->Enabled=true;</p><p> 到此,文件傳送結(jié)束。</p><p><b> 2、文件接收</b>
89、;</p><p> 服務(wù)器打開偵聽與客戶端連接上之后,在Memo1和StatusBar1上顯示已經(jīng)被“...”連接上,同時(shí)按鍵3有效,按鍵1的Caption為斷開連接,代碼如下:</p><p> Memo1->Lines->Append("已經(jīng)被"+Socket->RemoteAddress+":"+AnsiString (
90、Socket->RemotePort)+"連接上");</p><p> Button3->Enabled=true;</p><p> Button1->Caption="斷開連接";</p><p> StatusBar1->Panels->Items[1]->Text=AnsiS
91、tring("已經(jīng)被"+Socket-> RemoteAddress+":"+AnsiString(Socket->RemotePort)+"連接上");</p><p> 單擊ServerSocket1,在Events的OnClientRead(ClientSocket發(fā)送信息到ServerSocket)處雙擊,代碼窗口中會(huì)自動(dòng)生成一個(gè)該
92、控件的基本程序框架。</p><p> void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,</p><p> TCustomWinSocket *Socket){ }</p><p> 文件接收的代碼編寫都在大括號里。</p><p> 首先接收頭文件的
93、長度,并在Memo1中顯示,如下:</p><p> int ReceiveLen=Socket->ReceiveLength();</p><p> Memo1->Lines->Append("首次接收字節(jié)數(shù):"+AnsiString(k)+"/"+AnsiString (ReceiveLen));</p>&l
94、t;p> 再計(jì)算出接收文件的總長度,并在Memo1中顯示</p><p> int iRcvFileLength;</p><p> byte *rdTmpFileBuf=new byte[ReceiveLen];</p><p> iRcvFileLength=rdTmpFileBuf[3];</p><p> iRcvFi
95、leLength=iRcvFileLength*256+rdTmpFileBuf[2];</p><p> iRcvFileLength=iRcvFileLength*256+rdTmpFileBuf[1];</p><p> iRcvFileLength=iRcvFileLength*256+rdTmpFileBuf[0];</p><p> Memo1-&
96、gt;Lines->Append("將接收的文件長度為:"+AnsiString (iRcvFileLength));</p><p> 由于發(fā)送的時(shí)候是按每次4096個(gè)字節(jié)來發(fā)送的,所以對應(yīng)于接收文件的長度也是按每次4096個(gè)字節(jié)來接收的,代碼如下:</p><p> iRcvFilePtr+=ReceiveLen;</p><p>
97、 Memo1->Lines->Append("本次接收文件長度為:"+AnsiString(ReceiveLen)</p><p> +"/"+AnsiString(iRcvFilePtr)+"/"+AnsiString(iRcvFileLength));</p><p> 如果接收文件的指針>=接收文件的
98、總長度,則表明接收文件成功,在Memo1中顯示,并彈出一個(gè)提示框,代碼如下:</p><p> if(iRcvFilePtr>=iRcvFileLength)</p><p><b> {</b></p><p> fclose(RcvFp);</p><p> iRcvFilePtr=-1; //開
99、始新的文件</p><p> Memo1->Lines->Append("已接收到"+AnsiString(iRcvFileLength)+"字節(jié)文件,保存為"+rcvFileName+"!");</p><p> Memo1->Lines->Append("");</p>
100、;<p> ShowMessage("已接收到"+AnsiString(iRcvFileLength)+"字節(jié)文件,保存為"+rcvFileName+"!");</p><p><b> }</b></p><p> 到此,文件接收結(jié)束。</p><p> 5
101、軟件運(yùn)行與結(jié)果</p><p><b> 5.1 運(yùn)行情況</b></p><p> 1、軟件設(shè)計(jì)完成之后,將其保存在指定的路徑之下,設(shè)置保存目錄為“E:\文件傳輸\”。</p><p> 2、單擊加速條上的運(yùn)行按鈕,或按F9運(yùn)行程序,結(jié)果如圖5-1。在客戶端界面單擊右鍵設(shè)置中心IP地址為127.0.0.1,如圖5-2。</p>
102、;<p> 3、設(shè)置好IP后,單擊服務(wù)器端的“等待接連”按鈕,打開偵聽,如圖5-3所示,然后單擊客戶端的“連接中心”按鈕,與服務(wù)器相連接,連接成功,如圖5-4所示。</p><p> (a) 客戶端 (b) 服務(wù)器端</p><p> 圖5-1 軟件界面</p><p> (a) 右鍵
103、彈出菜單 (b) 輸入IP</p><p> 圖5-2 IP設(shè)置</p><p> 圖5-3 服務(wù)器打開偵聽</p><p> (a) 客戶端 (b) 服務(wù)器端</p><p> 圖5-4 服務(wù)器與客戶端成功連接</p
104、><p> 4、成功連接之后,兩端就可以互相發(fā)送文件了。單擊“向中心發(fā)送文件”按鈕,在彈出的對話框內(nèi)選擇要發(fā)送的文件,如圖5-5,打開選中的文件之后就開始傳送文件,傳送成功后在客戶端的Memo1中顯示文件傳送的信息,在服務(wù)器端的Memo1中顯示文件接收的信息,并在服務(wù)器端彈出一個(gè)提示框,如圖5-6。</p><p> 圖5-5 打開文件對話框</p><p>
105、圖5-6 文件發(fā)送成功</p><p> 5、發(fā)送結(jié)束后,點(diǎn)擊OK,關(guān)閉提示框,然后點(diǎn)界面右上角的叉,退出程序。</p><p> 5.2 有待開發(fā)的地方</p><p> 經(jīng)過測試,在本程序的基礎(chǔ)上還可以做出如下改進(jìn):</p><p> 1、一對多發(fā)送文件。目前發(fā)送文件需要設(shè)置IP,只能點(diǎn)對點(diǎn)傳輸,如果要發(fā)送至多人就需要重新設(shè)置I
106、P,比較麻煩。</p><p> 2、選擇保存地址。文件接收到后可以選擇其保存地址,而不是在安裝這個(gè)軟件的目錄下。</p><p> 3、文件傳輸服務(wù)器安全問題??梢詫鬏斘募M(jìn)行加密或加入用戶安全認(rèn)證系統(tǒng)。</p><p> 4、進(jìn)一步美化軟件界面。</p><p><b> 6 結(jié) 論</b></p&
107、gt;<p> 本文按照任務(wù)書的要求,首先通過閱讀相關(guān)資料了解TCP/IP協(xié)議,熟悉C++ Builder開發(fā)環(huán)境。在了解了C++ Builder的內(nèi)容以及熟悉面向?qū)ο笙嚓P(guān)技術(shù)之后,又進(jìn)一步的了解TCP Socket有關(guān)的API函數(shù)及其編程。在熟悉了一系列的相關(guān)知識之后,開始制訂文件實(shí)時(shí)發(fā)送設(shè)計(jì)方案。Internet網(wǎng)絡(luò)技術(shù)發(fā)展迅速,特別是基于網(wǎng)絡(luò)的應(yīng)用服務(wù),已延伸到人們生活中不可缺少的一部分。所以網(wǎng)絡(luò)實(shí)時(shí)文件傳輸軟件的
108、設(shè)計(jì)對于簡單的傳輸文件還是挺有幫助的。</p><p> 該軟件所實(shí)現(xiàn)的功能很簡單,只是點(diǎn)對點(diǎn)文件的發(fā)送與接收。盡管如此,在編寫程序的過程中還是碰到了許多的困難。比如,剛接觸到線程這個(gè)概念的時(shí)候,還不是很能理解它的作用,對于如何創(chuàng)建一個(gè)與程序相關(guān)的發(fā)送文件線程,然后用一個(gè)主線程去調(diào)用創(chuàng)建的文件發(fā)送線程也不是很明白。程序中文件的發(fā)送是要先計(jì)算出文件的長度,然后每次發(fā)送都是按照固定字節(jié)發(fā)送的,相對應(yīng)于接收也是分字節(jié)
109、接收的。對于這個(gè)分段發(fā)送文件也困擾了我好久。還有就是最后接收的文件不能對其先重命名然后選擇其保存地址,只能保存在安裝這個(gè)軟件的目錄下,目前這個(gè)功能還沒有實(shí)現(xiàn)。</p><p> 這些待解決的問題是本次設(shè)計(jì)中的不足之處,在日后會(huì)盡力去解決。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 謝希仁譯. TCP/IP協(xié)議族
110、[M]. 北京:清華大學(xué)出版社, 2001,9.</p><p> [2] International Technical Support Organization. TCP/IP Tutorial and Technical Overview[EB/OL],[2010-9-27]. www.redbooks.ibm.com/redbooks/pdfs/gg2433 76.pdf, December 2006.
111、</p><p> [3] 任泰明. TCP/IP協(xié)議與網(wǎng)絡(luò)編程[M]. 西安:西安電子科技大學(xué)出版社, 2004,3.</p><p> [4] 劉永華,于春花,李曉利. Java網(wǎng)絡(luò)編程技術(shù)[M]. 北京:清華大學(xué)出版社, 2008,5.</p><p> [5] 楊延雙,張建標(biāo),王全民. TCP/IP協(xié)議分析及應(yīng)用[M]. 北京:機(jī)械工業(yè)出版社, 200
112、7,2.</p><p> [6] 汪曉平,鐘軍. Visual C++網(wǎng)絡(luò)通信協(xié)議分析與應(yīng)用實(shí)現(xiàn)[M]. 北京:人民郵電出版社, 2003,2.</p><p> [7] 趙強(qiáng). 基于FTP協(xié)議的文件傳輸服務(wù)器的研究[D]. 大連:大連海事大學(xué), 2008.</p><p> [8] 馬永琴,李正文,汪劉艷. 基于WinSock的文件互傳[J]. 重慶大學(xué)學(xué)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)實(shí)時(shí)文件傳輸軟件的開發(fā)【開題報(bào)告】
- 畢業(yè)論文范文——java文件傳輸
- 畢業(yè)論文——基于android的ftp文件傳輸
- 畢業(yè)論文——基于android的ftp文件傳輸
- 畢業(yè)論文——基于android的ftp文件傳輸
- 多線程網(wǎng)絡(luò)文件傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- XMPP協(xié)議兼容的即時(shí)文件傳輸策略.pdf
- 基于socket技術(shù)的windows mobile設(shè)備間的文件傳輸工具開發(fā)【畢業(yè)論文】
- 網(wǎng)絡(luò)文件傳輸機(jī)制探析
- 網(wǎng)絡(luò)文件傳輸技術(shù)【文獻(xiàn)綜述】
- 畢業(yè)論文---基于局域網(wǎng)的文件傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- java文件傳輸(論文+源代碼)
- rtp--實(shí)時(shí)軟件傳輸協(xié)議畢業(yè)論文外文翻譯
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文-基于android的ftp文件傳輸
- 深空網(wǎng)絡(luò)文件傳輸協(xié)議研究.pdf
- 基于android的ftp文件傳輸
- 基于android的ftp文件傳輸
- 軟件開發(fā)畢業(yè)論文-畢業(yè)論文
- asp.net多功能聊天軟件的設(shè)計(jì)與開發(fā)——文字聊天文件傳輸模塊(源代碼+論文)
- asp.net多功能聊天軟件的設(shè)計(jì)與開發(fā)——文字聊天文件傳輸模塊(源代碼+論文)
評論
0/150
提交評論