畢業(yè)設(shè)計(論文)說明書-eMule網(wǎng)絡(luò)文件系統(tǒng)開發(fā)_第1頁
畢業(yè)設(shè)計(論文)說明書-eMule網(wǎng)絡(luò)文件系統(tǒng)開發(fā)_第2頁
畢業(yè)設(shè)計(論文)說明書-eMule網(wǎng)絡(luò)文件系統(tǒng)開發(fā)_第3頁
畢業(yè)設(shè)計(論文)說明書-eMule網(wǎng)絡(luò)文件系統(tǒng)開發(fā)_第4頁
畢業(yè)設(shè)計(論文)說明書-eMule網(wǎng)絡(luò)文件系統(tǒng)開發(fā)_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

畢業(yè)設(shè)計(論文)說明書題目:eMule網(wǎng)絡(luò)文件系統(tǒng)開發(fā)隨著計算機和網(wǎng)絡(luò)的普及,單獨工作、不需要和其他用戶交互的軟件越來越少,作為一項新興的網(wǎng)絡(luò)技術(shù),P2P以其無與倫比的可伸縮性和對資源的利用率吸引著大眾的系統(tǒng)會無法提供服務(wù)。而基于P2P的網(wǎng)絡(luò)中,每個節(jié)點既可以為其它節(jié)點提供服務(wù),也善。在這樣的背景下,本文設(shè)計開發(fā)了eMule網(wǎng)絡(luò)文件系統(tǒng)。系統(tǒng)采用P2P網(wǎng)絡(luò)模型,在整個文件上傳與下載過程中客戶端不需要任何服其他多個客戶端中下載所需的不同文件數(shù)據(jù)塊,實現(xiàn)了多點上傳與下載并行,極大提高了速度。載模塊??蛻舳颂峁┑墓δ苤饕ǎ何募幚淼裙δ?。夠檢測錯誤數(shù)據(jù)恢復(fù)是否成功。在進行共享文件查找時,利用文件指紋可以精確的查找到所需的文件,避免文件同名而內(nèi)容不同的情況。在上傳下載過程中,系統(tǒng)使用文件分塊、利用內(nèi)存作下載數(shù)據(jù)緩存等多種技術(shù)。WiththepopularizationofUndersuchabackground,thistexthaslotofonlineclientatthesametime,achieveamoreuploadanddownloThesystemisdividedintothreepiecesofmodule:tfuzzyinquiry,fingerprintrecognitionoffile,wrongdaThesystemusespaperfingerprintrecognitiontechnologythatportsandmagneticdiscspace,dynamicadjustmentoffiletransferpacketsize,multithreading畢業(yè)設(shè)計(論文)報告用紙 1 1 2 2 2 3 3 32.2P2P的特點 3 32.3.1純P2P模型 42.3.2帶有一個簡單發(fā)現(xiàn)服務(wù)器的P2P模型 42.3.3帶有發(fā)現(xiàn)和查找服務(wù)器的P2P模型 42.3.4帶有發(fā)現(xiàn)、查找和內(nèi)容服務(wù)器的P2P模型 4 4 52.4.2動態(tài)發(fā)現(xiàn)模型 52.4.3目錄發(fā)現(xiàn)模型 5 52.4.5多播模型 6 6 73.1P2P穿越 7 7 8 83.2多線程技術(shù) 3.2.1線程的組成 3.2.2創(chuàng)建一個線程 3.2.3線程的終止 3.2.4線程的調(diào)度 畢業(yè)設(shè)計(論文)報告用紙 3.6文件MD5校驗 4.1系統(tǒng)采用的P2P模型 4.1.1客戶端與客戶端之間的發(fā)現(xiàn) 4.1.2客戶端向服務(wù)端查詢數(shù)據(jù) 4.3系統(tǒng)各組件的聯(lián)系 4.3.1客戶端上傳下載模塊到服務(wù)器的聯(lián)系 4.3.3客戶端指令監(jiān)視模塊到服務(wù)器的聯(lián)系 5P2P文件傳輸系統(tǒng)的實現(xiàn) 5.4.1在線程中發(fā)送數(shù)據(jù) 5.5數(shù)據(jù)庫操作模塊 5.6.1文件下載 6系統(tǒng)安全與測試 6.2.1測試方法 畢業(yè)設(shè)計(論文)報告用紙 結(jié)論 桂林電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙第1頁共37頁隨著技術(shù)的不斷發(fā)展,Internet上出現(xiàn)了各種各樣的下載工具,正所謂五花八門,百家爭鳴。下載軟件雖然很多,但是他們的下載手段大致說來可以分成三大類,的HTTP和FTP下載,剛剛出現(xiàn)沒多久然而已經(jīng)風(fēng)靡全球的P2P下載。件傳輸協(xié)議)的縮寫,而HTTP則是HyperTextTransportationProtocol(超文本傳輸協(xié)專門用來下載,而HTTP的主要工作是用來瀏覽網(wǎng)頁,不過也能用來下載。這兩種下載方式的原理并不復(fù)雜,就是用戶按照一定的規(guī)則(協(xié)議)和提供文件的服務(wù)器取得聯(lián)系就HTTP、FTP等下載方式而言,一般都是首先將文件放到服務(wù)器上,然后再由服有用戶的下載速度,如果某些用戶使用了多線程下載,那對帶寬的影響就更嚴(yán)重了,因此幾乎所有的下載服務(wù)器都有用戶數(shù)量和最高下載速度等方面的限P2P文件傳輸是通過一種傳銷的方式來實現(xiàn)文件共享的,它并不會完全從服務(wù)器下載這個文件的所有部分,而是根據(jù)實際情況成的部分,這就大大減輕了P2P文件傳輸服務(wù)器的負(fù)荷,也同時加快了下載速度,也就是說每臺參加下載的計算機既從其他用戶的計算機上下載文件,同時自身也向其他用戶提供下載,因此參與下載的用戶數(shù)量越多,下載速度也越高。文中首先論述了基于P2P網(wǎng)絡(luò)的文件傳輸產(chǎn)生的背景和意義,接著介紹了P2P的相關(guān)理論知識。然后介紹了本系統(tǒng)的關(guān)鍵技術(shù),包括軟件的P2P穿越技術(shù),多線程技術(shù),體設(shè)計情況以及它們之間的聯(lián)系。最后給出測試交換文件,而不是像過去那樣連接到服務(wù)器去瀏覽與下載;它改變互聯(lián)網(wǎng)現(xiàn)在的以大網(wǎng)站為中心的狀態(tài)、重返“非中心化”,并把權(quán)力交還給用戶。 桂林電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙第2頁共37頁信的對象從人-人,人-機發(fā)展到機-機,其應(yīng)用從家庭網(wǎng)絡(luò)和傳感器/執(zhí)行器網(wǎng)絡(luò)到軍事上在標(biāo)準(zhǔn)化方面工作進展緩慢。目前P2PWG已經(jīng)和GGF合并,由該論壇管理P2P計算入較大。Microsoft公司成立了Pastry項目組,主要負(fù)責(zé)P2P計算技術(shù)的研究工作,目WindowsVista操作系統(tǒng)中,也增加了最新的P2P研究成果來支持協(xié)同工作。2000年8應(yīng)用開發(fā)商合作,開發(fā)P2P應(yīng)用平臺。2002年Intel發(fā)布了.Net基礎(chǔ)架構(gòu)之上的AcceleratorKit(P2P加速工具包)和P2P安全API軟件包,從而使得微軟.Net開發(fā)人員能夠迅速地建立P2P安全Web應(yīng)用程序。IBM公司也開展了基于P2P技術(shù)的研究,提研究意義。桂林電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙第3頁共37頁本課題是一個使用P2P網(wǎng)絡(luò)模型的文件傳輸系統(tǒng),其思想是在不經(jīng)過固作為路由轉(zhuǎn)發(fā)的情況下,能夠在Internet上任意兩臺電腦就可以直接通訊。處于不同子的有效方法,也是本畢業(yè)設(shè)計的關(guān)鍵技術(shù)之一。使用UDP“打洞”讓兩個處于不同子網(wǎng)的客戶端能夠使得遠(yuǎn)程數(shù)據(jù)傳輸成為可能。文件傳輸是將一個文件切割為若干小塊,并且附加一些相關(guān)消息,傳輸給遠(yuǎn)程用戶,當(dāng)遠(yuǎn)程用戶接收到這些被切割成小塊的文件碎片后2P2P相關(guān)理論●服務(wù)器及網(wǎng)絡(luò)的帶寬決定了性能。每臺服務(wù)器所能提供的信息數(shù)量受到自身存儲空間的限制,而任意時刻它所能支持的客戶端訪問數(shù)量則既受到自身處理能●被發(fā)布信息的分布與生存期十分穩(wěn)定。服務(wù)器只發(fā)布機器所有者想公之于眾的信息,這些信息將會在該服務(wù)器上穩(wěn)定地保存一段時間,并且該服務(wù)器通常也●被發(fā)布信息的存貯與管理比較集中、規(guī)范?;ヂ?lián)網(wǎng)上所有可以公開訪問的信息基本上都保存在服務(wù)器上,服務(wù)器根據(jù)適當(dāng)?shù)乃惴ê鸵?guī)則管理本地信息,應(yīng)答●每一個對等點具有相同的地位,既可以請求服務(wù)也可以提供服務(wù),還可以具有路由器和高速緩沖存儲器的功能,從而弱化了甚至取消了服務(wù)器的作用?!衩恳粋€對等點可以充分利用網(wǎng)絡(luò)上其他對等體的信息資源、處理器周期、高速緩存和磁盤,各種資源都得到了較充分,均衡的利用?!衩恳粋€對等點可以隨意地加入或退出網(wǎng)絡(luò)。●帶有一個簡單的發(fā)現(xiàn)服務(wù)器的P2P模型 桂林電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙第4頁共37頁●帶有發(fā)現(xiàn)服務(wù)器和查找服務(wù)器的P2P模型●帶有發(fā)現(xiàn)服務(wù)器、查找服務(wù)器和內(nèi)容服務(wù)器的P2P模型純P2P模型完全依賴于計算機(C/S模型中的客戶)。這似乎是矛盾的,因為每個網(wǎng)絡(luò)模型都像傳統(tǒng)的C/S模型一樣涉及到客戶和服務(wù)器,但是純P2P模型不依賴任何中心服務(wù)器而工作。一旦P2P應(yīng)用程序下載到計算機的內(nèi)存中,網(wǎng)絡(luò)中的端就動態(tài)地發(fā)輸數(shù)據(jù)就是通過通信來下載和上載文件、執(zhí)行在線活動、發(fā)送請求和接收響應(yīng)等等。2.3.2帶有一個簡單的發(fā)現(xiàn)服務(wù)器的P2P模型這個名稱暗示了這種模型的結(jié)構(gòu),這樣的P2P模型實際上不包括一個服務(wù)器,為了實現(xiàn)一些管理,這種模型中服務(wù)器的作用已經(jīng)下降。服務(wù)器的作用限于為正在加入的端提供已經(jīng)連接端的名字,正在加入的端通知服務(wù)器它已經(jīng)登錄了。一定要注意服務(wù)器僅型通過提供給端一系列已經(jīng)相連端的清單而超出純P2P模型,這樣增加了發(fā)現(xiàn)網(wǎng)絡(luò)上大量端的機會。為了下載資源,端必須單獨與每個量的處理時間。2.3.3帶有發(fā)現(xiàn)和查找服務(wù)器的P2P模型增強服務(wù)器的功能而繼承了純P2P和帶有簡單發(fā)現(xiàn)服務(wù)器的P2P兩者的特性。這種模型減輕了端的負(fù)擔(dān),因為不再需要通過訪問每個端例如登錄進人相連端的信息數(shù)據(jù)庫,進入它們共享資源目錄等2.3.4帶有發(fā)現(xiàn)、查找和內(nèi)容服務(wù)器的P2P模型相連接,因為所有的資源都存儲在中心服務(wù)器的接訪問服務(wù)器而不是和另外的端通信,服務(wù)器處理這些請求并顯示信息來源。這種模型主要的缺點在于如果同時有太多的請求,服務(wù)器的速度會減慢;這種模型的另一個缺點就是成本很高,因為服務(wù)器必須自己管理、存儲數(shù)據(jù)并處理所有的請求。2.4對等點的發(fā)現(xiàn) 桂林電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙第5頁共37頁2.4.1顯式點到點配置顯式點到點配置與其說是一種發(fā)現(xiàn)機制,還不如說是一種用來避免實現(xiàn)發(fā)現(xiàn)的機制。每個存在的對等點都知道其它對等點的地址。一般而言,分布式應(yīng)用程序中節(jié)點的顯式點到點配置不能很好地擴展到具有較多節(jié)點的大型網(wǎng)絡(luò)。那就是為什么分布應(yīng)用程序和技術(shù)大多包含命名和定位功能。這也解釋了為什么域名系統(tǒng)(DNS)最終取代了用于機器命名的主機文件(hostsfile)機制。維護主機文件是單調(diào)乏味、容易出錯的,并且一般來說,很難方便地在大型網(wǎng)絡(luò)環(huán)境下運轉(zhuǎn)。但是,顯式點到點配置并非一無是處。點到點尋址缺乏靈活性的特性也帶來了一定程度的安全性。通過對網(wǎng)絡(luò)中得很穩(wěn)固。2.4.2動態(tài)發(fā)現(xiàn)模型性。這些模型通常更適用于P2P應(yīng)用程序,以下在討論三種機制的基礎(chǔ)上提出一新的方法。對等點通過這些機制動態(tài)地定位其它對等點和了解它自身所屬的環(huán)境。2.4.3目錄發(fā)現(xiàn)模型在目錄服務(wù)模型中,一臺或多臺有特殊用途的點向目錄服務(wù)注冊關(guān)于自身的信息(其名稱、地址、資源和元數(shù)據(jù)),并通過目錄服務(wù)器定位其它對等點。基于P2P的應(yīng)用中使用目錄模型的最典型的代表是Napster。在Napster中中式管理目錄。雖然,采用集中式管理的目錄服務(wù)模型被認(rèn)為“本質(zhì)上非P2P”,但它確實有一個很大的優(yōu)勢:集中式管理使它容易確保服務(wù)器硬件和配置能足以達(dá)次化結(jié)構(gòu),根目錄代表頂級域(譬如"com"),它將子域查詢服務(wù)(如“etcee_com”這樣的域)的任務(wù)委派到下一層次的DNS服務(wù)器。2.4.4網(wǎng)狀模型基于網(wǎng)狀模型P2P應(yīng)用系統(tǒng)中,有很多對等點(通常是動態(tài)的)。沒有一個對等點知道整個網(wǎng)絡(luò)的結(jié)構(gòu)或者組成網(wǎng)絡(luò)的每個對等點的身份。相反,對等點只知道直接與它們通信的對等,各點對等點必須合作完成任務(wù)。 桂林電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙第6頁共37頁查詢、分布式消息傳遞,甚至包括認(rèn)證和授權(quán)行為。因為涉及通信量的多少,文件傳輸這樣需要大流量的網(wǎng)絡(luò)操作通常在對等點間直接發(fā)生,而消息的傳遞則在網(wǎng)絡(luò)中經(jīng)過其它對等點傳遞。2.4.5多播模型由于多播模型和網(wǎng)狀模型很相似。這種模型利用網(wǎng)絡(luò)自身提供的特性來定位和確認(rèn)對等點和資源。這種技術(shù)的實現(xiàn)使用IP多播來實現(xiàn)查詢。不像單播IP數(shù)據(jù)報(一臺主機最多只能向一臺主機發(fā)送數(shù)據(jù)報),多播IP數(shù)據(jù)報可以同時發(fā)往多臺主機。更重要的是,發(fā)送方不必知道有多少接收方存在或者究竟有沒有接收方存在。發(fā)送主機只是封裝消息并將它發(fā)布到網(wǎng)絡(luò)上。符合某些條件(TP地址和端口號)的客戶機將接收到該消息的一個副本。使用IP多播技術(shù)的發(fā)現(xiàn)通過讓對等點用多播定期宣布自己的存在來工作。該消息包含對等點的TCP/IP主機名和端口號。對此消息感興趣的對等點檢測這個消息后,抽取出主機名和端口號,并使用這個信息與新對等點建立正常的TCP/IP連接。這就是多播是如何在單個子網(wǎng)上工作的。眾多子網(wǎng)(組成整個網(wǎng)絡(luò))間的路由多播通信是完全不同的,并且是一個非常復(fù)雜的課題。這也是基于IP多播的發(fā)現(xiàn)的局限所在。沒有路由器的支持,基于IP多播的發(fā)現(xiàn)被局限在同一子網(wǎng)上的對等點之間?;诎踩钥紤],因特網(wǎng)對多播并不友好。2.4.6主動搜索模型目錄服務(wù)模型和網(wǎng)狀模型均或多或少的依賴于服務(wù)器的參與,若這些服務(wù)器均出現(xiàn)故障,整個應(yīng)用系統(tǒng)將無法工作。多播模型雖然可以做到完全不需要服務(wù)器的參與,但該模型依賴于IP多播。絕大部分路由器不支持IP多播,因此該模型在Internet中并沒有多大實用價值。該文分析以上模型的優(yōu)缺點的基礎(chǔ)上提出了主動搜索模型。該模型基本原理如下:每個欲加入的對等點主動在網(wǎng)絡(luò)上掃描搜索己經(jīng)存在的結(jié)點,若掃描到其它對等點,則對等點之間互相交換自己所知道的其它對等點的地址。該方法理論上能做到完全不需要任何服務(wù)器的存在,但要在Internet中掃描搜索其它存在的對等點就像大海撈針一樣困難,因此必須設(shè)法減少搜索的范圍,主要采用如下一些策略來減少掃描工●優(yōu)先在自己所處的網(wǎng)段搜索。●記錄加入到網(wǎng)絡(luò)中所知道的其它對等點的地址,以后每次掃描時,優(yōu)先掃描這些地址?!駜?yōu)先掃描以前知道的對等點的地址所處的網(wǎng)段?!袢裟硨Φ赛c發(fā)現(xiàn)另外某些對等點長期穩(wěn)定地存在于網(wǎng)絡(luò)中,則在網(wǎng)絡(luò)中散布(各對等點互相轉(zhuǎn)告)這些地址。這將導(dǎo)致這些對等點知道很多其它的對等點地址, 桂林電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙第7頁共37頁且以后掃描時,也優(yōu)先掃描這些穩(wěn)定存在的對等點的地址,這樣將大大減少對該模型尤其適合只在某些區(qū)域網(wǎng)(如校園網(wǎng),企業(yè)內(nèi)部網(wǎng))內(nèi)部使用的P2P應(yīng)用,在這些場合可以完全做到不需要任何服務(wù)器的存在就能發(fā)現(xiàn)其它的對等點且是實用的。3關(guān)鍵技術(shù)3.1P2P穿越在Internet最初的體系結(jié)構(gòu)中,每個結(jié)點都有一個全局唯一的IP地址,能夠直接相互通信。但是這個結(jié)構(gòu)已經(jīng)不復(fù)存在了,取而代之的是結(jié)構(gòu)包含了一個全局地址空間僅在“主”全局地址空間中的節(jié)點才可以容易的從網(wǎng)絡(luò)中其他地方連接到,因為僅它們擁有唯一的、全局可路由的IP地址。私有網(wǎng)絡(luò)中的節(jié)點可以連接到在相同私有網(wǎng)絡(luò)中的其他節(jié)點,可以連接到全局地址空間中的的公共終端,轉(zhuǎn)化組成這些會話的封包中的IP地址和端口號。tISP私有網(wǎng)絡(luò)家庭網(wǎng)絡(luò)家庭網(wǎng)絡(luò)家庭網(wǎng)絡(luò)圖3-1公有IP地址和私用IP地址Internet新的地址結(jié)構(gòu)適合典型的客戶/服務(wù)器通信,但是它給兩個在不同子網(wǎng)中 桂林電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙第8頁共37頁的節(jié)點直接相互通信帶來了困難,這種點對點的直接互聯(lián)是實施P2P通信協(xié)議的基礎(chǔ)。我們要做的是尋找一種方法,來使P2P通信協(xié)議在NAT存在的情況下也能夠正常工作。NAT英文全稱是“NetworkAddressTranslation”,中文意思是“網(wǎng)絡(luò)地址轉(zhuǎn)換”,它是一個IETF(InternetEngineeringTaskForce,Internet工程任務(wù)組)標(biāo)準(zhǔn),允許一個整體機構(gòu)以一個公用IP(InternetProtocol)地址出現(xiàn)在Internet上。顧名思義,它是一種把內(nèi)部私有網(wǎng)絡(luò)地址(IP地址)翻譯成合法網(wǎng)絡(luò)IP地址的技術(shù)。NAT最初的目的是為使用內(nèi)網(wǎng)IP地址的計算機提供通過少數(shù)幾臺具有公網(wǎng)的IP地址的計算機訪問外部網(wǎng)絡(luò)的功能。NAT負(fù)責(zé)將某些內(nèi)網(wǎng)IP地址的計算機向外部網(wǎng)絡(luò)發(fā)出的IP數(shù)據(jù)包的源IP地址轉(zhuǎn)換為NAT自己的公網(wǎng)的IP地址,目的IP地址不變,并將IP數(shù)據(jù)包轉(zhuǎn)發(fā)給路由器,最終到達(dá)外部的計算機。同時負(fù)責(zé)將外部的計算機返回的IP數(shù)據(jù)包的目的IP地址轉(zhuǎn)換為內(nèi)網(wǎng)的IP地址,源IP地址不變,并最終送達(dá)到內(nèi)網(wǎng)中的計算機。隨著網(wǎng)絡(luò)的普及,IPv4的局限性暴露出來。公網(wǎng)IP地址成為一種稀缺的資源,此時NAT的功能局限也暴露出來,同一個公網(wǎng)的IP地址,某個時間只能由一臺私有IP通過一個公網(wǎng)IP地址來訪問Internet的功能。這在很大程度上暫時緩解了IPv4地址資源的緊張。NAT負(fù)責(zé)將某些內(nèi)網(wǎng)IP地址的計算機向外部網(wǎng)絡(luò)發(fā)出的TCP/UDP數(shù)據(jù)包的源IP地址轉(zhuǎn)換為NAT自己的公網(wǎng)的IP地址,源端口轉(zhuǎn)為NAT自己的一個端口。目的IP地址和端口不變,并將IP數(shù)據(jù)包發(fā)給路由器,最終到達(dá)外部的計算機。同時負(fù)責(zé)將外部的計算機返回的IP數(shù)據(jù)包的目的IP地址轉(zhuǎn)換內(nèi)網(wǎng)的IP地址,目的端口轉(zhuǎn)為內(nèi)網(wǎng)計算機的端口,源IP地址和源端口不變,并最終送達(dá)到內(nèi)網(wǎng)中的計算機。過1至N臺支持NAT的路由器來實現(xiàn)公司的所有計算機連接外部的Internet網(wǎng)絡(luò)的。導(dǎo)致連接數(shù)用過少,下載速度很難上去。因此P2P軟件必須要解決的一個問題就是要能3.1.3UDP打洞不同子網(wǎng)中主機間建立點對點通信的最有效的方法之一是“打洞”。這個技術(shù)廣泛 桂林電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙第9頁共37頁名稱上看,“打洞”好像危及到了私有網(wǎng)絡(luò)的安全,事實并不是這樣。打洞使應(yīng)用程序點通信會話是被懇求的(被你的網(wǎng)絡(luò)中的主機邀請來的),應(yīng)該被接受”。打洞過程假設(shè)A和B兩個客戶都與中心服務(wù)器S有活動的UDP會話。當(dāng)客戶向S注冊時,S紀(jì)錄下客戶的兩個終端:此客戶認(rèn)為它自己正使用的(IP地址,端口號)對和服務(wù)器認(rèn)為這個客戶正使用的(IP地址,端口號)對。第一個對稱為客戶的私有終端,第二個稱為客戶的公共終端??蛻粼谙蚍?wù)器注頭的源IP地址和源UDP端口域得到客戶的公共終端。本系統(tǒng)客戶A想要與客戶B直接建立UDP會話,打洞過程如下。會話向B發(fā)送連接請求信息,這個消息包含A的公共終端和私有終端。一旦這些消息到(3)當(dāng)A從S接收到B的公共和私有終端時,A就向這兩個終端發(fā)送UDP封包,隨后,“鎖住”首先引出B響應(yīng)的終端。同樣,當(dāng)B接收到A的公共和私有終端時,B就在這兩個終端上向A發(fā)送UDP封包,鎖住首先響應(yīng)的終端。向A發(fā)送B的終端向B發(fā)送A的終端NATC(1)圖3-2打洞之前圖3-3打洞過程桂林電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙第10頁共37頁NATANATB圖3-4打洞之后3.2多線程技術(shù)3.2.1線程的組成線程有兩部分組成。1.一個是線程的內(nèi)核對象,操作系統(tǒng)用它來對線程實施管理。內(nèi)核對象也是系統(tǒng)用來存放線程統(tǒng)計信息的地方。2.另一個是線程堆棧,它用于維護線程在執(zhí)行代碼時需要的所有函數(shù)參數(shù)和局部進程從來不執(zhí)行任何東西,它只是線程的容器。線程總是在某個進程環(huán)境中創(chuàng)建的,而且它的整個壽命期都在該進程中。這意味著線程在它的進程地址空間中執(zhí)行代碼,并且在進程的地址空間中對數(shù)據(jù)進行操作。因此,如果在單進程環(huán)境中,你有兩個或多個線程正在運行,那么這兩個線程將共享單個地址空間。這些線程能夠執(zhí)行相同的代碼,對相同的數(shù)據(jù)進行操作。這些線程還能共享內(nèi)核對象句柄,因為句柄表依賴于每個進程而不是每個線程存在。線程是一種操作系統(tǒng)對象,它表示在進程中代碼的一條執(zhí)行路徑。在每一個Win32的應(yīng)用程序中都至少有一個線程,它通常被稱為主線程或默認(rèn)線程。在應(yīng)用程序中也可以自由地創(chuàng)建別的線程去執(zhí)行其他任務(wù)。線程技術(shù)使不同的代碼可以同時運行。當(dāng)然,桂林電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙第11頁共37頁每個線程必須擁有一個進入點函數(shù),線程從用任何合法的名字??梢越o線程函數(shù)傳遞單個參數(shù),參數(shù)的含義由你自己定義。線程函數(shù)必須由一個返回值,它將成為該線程的退出代碼。線程函數(shù)應(yīng)該盡可能的使用函數(shù)參當(dāng)CreateThread被調(diào)用時,系統(tǒng)創(chuàng)建一個線程內(nèi)核對象。該線程內(nèi)核對象不是線程本身,而是操作系統(tǒng)用來管理線程的較小的線程的統(tǒng)計信息組成的一個小型數(shù)據(jù)結(jié)構(gòu)。系統(tǒng)從進程的地址空間中分配內(nèi)存,供線程的堆棧使用。新線程運行的進程環(huán)境與創(chuàng)建線程的環(huán)境相同。因此,新線程可以訪問進程的內(nèi)核對象的所有句柄、進程中的所有內(nèi)存和在這個相同的進程中的所有其他線程的堆棧。這使得單個進程中的多個線程確實能夠非常容易地互相通信。一旦內(nèi)核對象創(chuàng)建完成,系統(tǒng)就分配用于線程的堆棧的內(nèi)存。該內(nèi)存是從進程的地址空間分配而來的,因為線程并不擁有它自己的地址空間。然后系統(tǒng)將兩個值寫入新線程的堆棧的上端(線程堆??偸菑膬?nèi)存的高地址向低地址建立)。3.2.3線程的終止●線程擁有的所有用戶對象均被釋放。在Windows中,大多數(shù)對象是由包含創(chuàng)建何掛鉤。其他對象只有在擁有線程的進程終止運行時才被撤消?!窬€程的退出代碼從STILL_ACTIVE改為傳遞給ExitThread或TerminateThread的代碼●線程內(nèi)核對象的狀態(tài)變?yōu)橐淹ㄖ??!袢绻€程是進程中最后一個活動線程,系統(tǒng)也將進程視為已經(jīng)終止運行?!窬€程內(nèi)核對象的使用計數(shù)遞減1。當(dāng)一個線程終止運行時,在與它相關(guān)聯(lián)的線程內(nèi)核對象的所有未結(jié)束的引用關(guān)閉之前,該內(nèi)核對象不會自動被釋3.2.4線程的調(diào)度每個線程是擁有一個上下文結(jié)構(gòu)的,這個結(jié)構(gòu)維護在線程的內(nèi)核對象中。這個上下要查看當(dāng)前存在的所有線程內(nèi)核對象。在這些對象中,只有某些對象被視為可以調(diào)度的對象。Windows選擇可調(diào)度的線程內(nèi)核對象中的一個,將它加載到CPU的寄存器中,它的值是上次保存在線程的環(huán)境中的值。這項操作稱為上下文轉(zhuǎn)換。Windows實際上保存了一個記錄,它說明每個線程獲得了多少個運行機會。Windows被稱為搶占式多線程操作系統(tǒng),因為一個線程可以隨時停止運行,隨后另一個線程可進行調(diào)度。如你所見,可以對它進行一定程度的控制,但是不能太多。注意,無法保證線程總是能夠運行,也不能保證線程能夠得到整個進程,無法保證其他線程不被允許運行等等。Windows系統(tǒng)只調(diào)度可以調(diào)度的線程。這意味著該線程已經(jīng)暫停運行,不應(yīng)該給它安排任何CPU時間。在創(chuàng)建一個線程的時候,CreateThread函數(shù)接收的倒數(shù)第二個參數(shù)中賦值CREATESUSPENDED就可以創(chuàng)建一個暫停的線程。除了暫停的線程外,其他許多線程也是不可調(diào)度的線程,因為它們正在等待某些事情的發(fā)生。流,簡單來說就是建立在面向?qū)ο蠡A(chǔ)上的一種抽象的處理數(shù)據(jù)的工具。在流中,定義了一些處理數(shù)據(jù)的基本操作,如讀取數(shù)據(jù),寫入數(shù)據(jù)等,程序員是對流進行所有操作的,而不用關(guān)心流的另一頭數(shù)據(jù)的真正流向。流不但可以處理文件,還可以處理動態(tài)內(nèi)存、網(wǎng)絡(luò)數(shù)據(jù)等多種數(shù)據(jù)形式。在程序中利用流的方便性,寫起程序會大大提高效率3.4文件的分塊為便于各客戶端下載文件,文件被分成大小相等(最后一塊除州的若干塊。每一塊附上校驗信息,對于一個大的文件來說,這是很有必要的,因為傳輸層的校驗方法過于簡單,漏檢率較高。各客戶端以塊為單位下載文件,一塊下載完成后對該塊進行校驗,并和校驗信息進行比較,確認(rèn)無誤后才認(rèn)為該塊己被下載。文件分塊算法描述如下:●欲下載某一文件的用戶首先獲得提供該文件的服務(wù)器的地址(包括IP地址和端口號,該服務(wù)器一定得是公網(wǎng)上的一臺計算機,即該服務(wù)器不位于任何NAT和防火墻之后)。●與該服務(wù)器通信。服務(wù)器將記錄它所看到的該用戶的IP地址和端口號?!裨撚脩粝蚍?wù)器請求獲取1到2個文件塊,服務(wù)器根據(jù)當(dāng)前荷載情況決定是否讓該用戶下載文件塊。若同意該用戶下載文件塊,服務(wù)器將優(yōu)先選擇還沒有被其他用戶下載的文件塊?!裣蚍?wù)器請求獲取一定數(shù)量的其他用戶的地址。服務(wù)器隨機選擇一定數(shù)量的其他用戶的地址返回給該用戶,優(yōu)先選擇時延小的地址。●該用戶與從服務(wù)器獲得的其他用戶的地址通信,若不能直接通信,將請求服務(wù) 桂林電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙第13頁共37頁器輔助?!裼脩糁g互相交換他們己經(jīng)下載的文件塊的信息,若需要(某用戶覺得自己的下載速度慢,且自己的網(wǎng)絡(luò)帶寬的利用率遠(yuǎn)遠(yuǎn)不夠,需要獲得更多的其他用戶的地址)的話交換他們所擁有的其他用戶的地址信息。●用戶之間互相下載文件塊,直至文件的所有塊被下載。優(yōu)先下載稀有的文件塊,即只被少數(shù)用戶擁有的文件塊。由于各用戶下載文件時并不是像傳統(tǒng)的文件下載那樣從文件頭開始,直到文件尾,而是按一定的算法順序下載文件的各個塊,因此需要將已經(jīng)下載的文件塊合理地存放起來,便于所有的文件塊下載完成后恢復(fù)成原來的文件。該軟件下載過程前先申請空間,然后按下載的文件塊的序號,寫到相應(yīng)的文件位置中。3.5多線程文件傳輸與斷點續(xù)傳在本系統(tǒng)中,文件的傳送是重要的功能之一,也是共享的基礎(chǔ)。本文件傳輸系統(tǒng)跟一些重要的協(xié)議像HTTP、FTP等一樣,都支持文件的多線程文件傳輸和斷點續(xù)傳功能。其目的就是為了解決網(wǎng)絡(luò)間的文件傳送問題,而且以其穩(wěn)定,高速,簡單而一直保持著很大的生命力。用來接收文件的客戶端的多線程文件傳輸是最重要,也最復(fù)雜,它負(fù)責(zé)線程的管理,進度的記錄等工作。算法描述如下:先連接服務(wù)器,統(tǒng)計能有多少在線用戶能提供某一文件的下載,然后根據(jù)文件長度和用戶數(shù)量決定分幾個線程下載,每一線程連接一個用戶,接著發(fā)送文件下載請求,請求包括文件位置,名字,MD5校驗碼,需要文件的開始位置和結(jié)束位置等。開始下載后,各個線程將下載到的文件塊寫入到本地磁盤中。斷點續(xù)傳的算法描述如下:當(dāng)各個線程開始下載以后,并記錄各個線程下載文件進程,每下載一定大小就記錄一次,并把文件下載進度寫到磁盤文件中,以防斷電,直到下載結(jié)束。當(dāng)要實現(xiàn)斷點續(xù)傳時,先校驗本地文件的MD5校驗碼,如果校驗碼與源文件校驗碼一致,則不需要使用續(xù)傳。如果不一致,先查詢本地的文件進度文件,根據(jù)進度文件記錄的數(shù)值,向遠(yuǎn)程用戶發(fā)送下載請求,文件的開始位置和結(jié)束位置為文件記錄的數(shù)值。3.6文件MD5校驗MD5的全稱是message-digestalgorithm5(信息-摘要算法),在90年代初由mit開發(fā)出來,經(jīng)md2、md3和md4發(fā)展而來。它的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的字節(jié)串變換成一定長的大整數(shù))。使用MD5算法對文件進行校驗時,MD5將整個文件當(dāng)作一個大文本信息,通過其不可逆的字符串變換算法,產(chǎn)生了這個唯一的MD5信息摘要。如果在以后傳播這個文件的過程中,無論文件的內(nèi)容發(fā)生了任何形式的改變(包括人為修改或者下載過程中線路不穩(wěn)定引起的傳輸錯誤等),只要你對這個文件重新計算MD5時就會發(fā)現(xiàn)信息摘要不相同,由此可以確定你得到的只是一個不正確的文件。在MD5算法中,首先需要對信息進行填充,使其字節(jié)長度對512求余的結(jié)果等于448。n為一個正整數(shù)。填充的方法如下,在信息的后面填充一個1和無數(shù)個0,直到滿足上面的條件時才停止用0對信息的填充。然后,在在這個結(jié)果后面附加一個以64位二進制表示的填充前信息長度。經(jīng)過這兩步的處理,現(xiàn)在的信息字節(jié)長度=n*512+448+64=(n+1)*512,即長度恰好是512的整數(shù)倍。這樣做的原因是為滿足后面處理中對信息長度的要求。在的庫函數(shù)中,已經(jīng)對MD5加密定義的類封裝了,直接調(diào)用系統(tǒng)函數(shù)文件,并創(chuàng)建一個類TMD5的實例即可對文件進行校驗,并產(chǎn)生32位的字節(jié)串校驗碼。4系統(tǒng)總體設(shè)計4.1本系統(tǒng)采用的P2P模型本系統(tǒng)采用帶有發(fā)現(xiàn)和查找服務(wù)器的P2P模型。服務(wù)器只用來提供相連端的清單和它們的可用資源,不再需要通過訪問每個端來查找必要的信息。這種模型中的服務(wù)器初始化兩個端間的通信,然后,這兩個相連的端建立通信、保持連接并執(zhí)行各種活動,例如登錄進人相連端的信息數(shù)據(jù)庫,進入它們共享資源目錄等等(如圖4-1)。送查詢請求向服務(wù)器發(fā)送查詢請求向服務(wù)器發(fā)向服務(wù)器發(fā)向服務(wù)器發(fā)送查詢請求4.1.1客戶端與客戶端之間的發(fā)現(xiàn)在這種模型中,服務(wù)器提供了服務(wù)的清單和端的清單,所有的用戶在登錄時都要通知服務(wù)器。這種服務(wù)器不僅發(fā)現(xiàn)其他端而且返回所有登錄端的重要信息。一個需要內(nèi)容的端發(fā)送它的查詢到服務(wù)器。服務(wù)器不僅僅提供端的清單,它也能提供基于條件的搜索并發(fā)現(xiàn)相關(guān)端。服務(wù)器返回所有連接端的清單。請求端連接有請求內(nèi)容的清單中的每個端。一旦請求的端定位需求的內(nèi)容,就連接它們。這個請求端就可以在網(wǎng)絡(luò)上下載所請求的內(nèi)容。雖然處理過程冗長,但是請求端顯然有足夠多的端來連接??梢陨陷d和下載使得這種模型和其他模型相比具有高度的靈活性。因此,這種模型相比其他的模型減少4.1.2客戶端向服務(wù)端查詢數(shù)據(jù)由于服務(wù)器的作用十分顯著,服務(wù)器的不但保存注冊用戶的清單,而且擴展到處理請求端搜索內(nèi)容的查詢處理。這個服務(wù)器處理已匹配這個內(nèi)容的端查詢,信息返回到請求端,搜索內(nèi)容端的搜索路徑比不帶查找服務(wù)器的P2P模型要短得多。但是這種模型服務(wù)器負(fù)擔(dān)加重,增多的請求會影響到速度和主要的性能。P2P模型突出一點就是它和傳統(tǒng)的模型不同,在端之間通信不總是需要一個中心服務(wù)器,它允許端之間的直接通信。如果被連接的端有被請求的內(nèi)容并且它愿意提供這些內(nèi)容,這種P2P模型的有利一面就很明顯了。因為服務(wù)器上的負(fù)載減少了,所以由于服務(wù)器導(dǎo)致的開銷也減少了,也就是說如果服務(wù)器崩潰,服務(wù)不會停止。除了提供客戶端發(fā)現(xiàn)客戶端和客戶端初始化連接服務(wù)之外,服務(wù)器的作用不是很明顯。一旦連接建立,端之間通信開始,服務(wù)器就不在這個結(jié)構(gòu)中了。4.1.3客戶端搜索和下載共享文件在所有的P2P模型中,這種模型是最有效和最靈活的。一個端無論何時要搜索一些特殊的內(nèi)容,它都可以直接在服務(wù)器上對已經(jīng)相連的端進行搜索,或者簡單地請求服務(wù)器對所需信息的結(jié)果進行回答。這種模型除了網(wǎng)絡(luò)上相連的端外,還有可服務(wù)于請求端。服務(wù)器上搜索工具可用是因為無論何時一個注冊端登錄后,除了驗證外,還將發(fā)送它的名字和共享的資源清單。因此,對于請求端搜索所需內(nèi)容比和每個端進行單獨連接更容一旦請求的端定位需求的內(nèi)容,就連接它們。這個請求端就可以在網(wǎng)絡(luò)上下載所請求的內(nèi)容。雖然處理過程冗長,但是請求端顯然有足夠多的端來連接??梢陨陷d和下載使得這種模型和其他模型相比具有高度的靈活性。這種搜索技術(shù)的好處是靈活,使得帶有搜索選項的請求端更容易連接。在這種模型中搜索所需時間迅速減少,盡管服務(wù)器有很高的開銷,P2P計算體系的這種模型仍然是開發(fā)者和用戶的最愛。4.2P2P文件傳輸系統(tǒng)的工作流程●服務(wù)器:維護應(yīng)用程序必需的數(shù)據(jù)庫●客戶端指令監(jiān)視模塊:通過一個友好的用戶界面給客戶端顯示結(jié)果并擔(dān)當(dāng)與客戶進行各種人機交互客戶端上傳下載模塊執(zhí)行的第一項工作就是登錄到服務(wù)器上,通知服務(wù)器它的存在并列出它共享資源的清單。登錄以后客戶端上傳下載就能處理服務(wù)器傳給它的客戶請求,只要有客戶連接,客戶端上傳下載都下載文件,在下載過程中,一個客戶端上傳下載可以容易地處理多個客戶的請求。在處理是擔(dān)當(dāng)服務(wù)器的作用。當(dāng)接收請求并響應(yīng)客戶時,客戶端上傳下載會根據(jù)請求方的需要客戶端上傳下載由共享文件信息類,共享文件搜索線程類,共享文件信息上傳線程類,登錄服務(wù)器函數(shù)組成,具體工作流程如圖4-2:4.2.2服務(wù)器功能的工作流程服務(wù)器保留有所有注冊客戶端上傳下載模塊的清單和這些客戶端上傳下載模塊共享給其他端資源的詳細(xì)描述。注意客戶端的傳下載模塊的清單后,服務(wù)器在客戶端和客戶端之間初戶端上傳下載模塊機器上下載文件,它直接在P2P環(huán)境中,這種搜索叫做全局請求。另一個是關(guān)于使用服務(wù)器的搜索的術(shù)語,即根搜索,這種搜索在客戶端上傳下載模塊聲明它的共享資源時發(fā)生。簡言之,在客戶端和客戶端之間建立一個連接后,服務(wù)器為服務(wù)器由客戶登錄線程類組成,具體工作流程如圖4-3:程序開始搜索所有共享文件目錄的文件,并將各文件信息到本地共享文件鏈表中。連接服務(wù)器接盛接盛換后的IP和Port把本地共享文件鏈表中的部分Port上傳到服務(wù)器的數(shù)據(jù)庫中。程序開始監(jiān)聽用戶登錄接受一個登錄請捕獲請求登錄端的經(jīng)NAT轉(zhuǎn)換的IP和Port的信息發(fā)給請求登錄端刪除數(shù)據(jù)庫中所有IP和Port等于該請求端IP和Port的記錄,插入該請求端的最新共享信息。關(guān)閉跟請求登錄端的連接圖4-3服務(wù)器工作流程圖客戶端指令監(jiān)視模塊充當(dāng)用戶和計算機之間的接口。通過客戶端指令監(jiān)視模塊,客戶發(fā)送它的請求并接收客戶端上傳下載模塊的響應(yīng)。和客戶端上傳下載模塊不同,客戶端指令監(jiān)視模塊一直運行在無人值守方式。下載模塊的清單并發(fā)送所有的請求給客戶端上傳下載模塊,讓客戶端上傳下載模塊自己來處理這些請求。一旦客戶端上傳下載模塊在用戶終端顯示結(jié)果。注意不是客戶端指令監(jiān)視模模塊來做這些工作。用戶只看到查詢的結(jié)果,處理內(nèi)容相對于用戶封裝了。有了客戶端指令監(jiān)視模塊的協(xié)助,就可以基于各種條件來搜索共享內(nèi)容。例如,客戶請求客戶端上傳下載模塊只顯示文檔文件索除了可以查詢客戶端上傳下載模塊內(nèi)容外,還可以提示客戶端指令監(jiān)視模塊上進行全局搜索并返回活躍的客戶端上傳下載模塊??蛻舳酥噶畋O(jiān)視模塊由文件信息查詢線程類組成,具體工作流程如圖4-4:程序開始輸入查詢條件將查詢條件發(fā)送給服務(wù)器,并等待查詢將服務(wù)器返回的數(shù)據(jù)流進行解包,最終將結(jié)果顯示出來關(guān)閉與服務(wù)器的連接圖4-4客戶端指令監(jiān)視模塊工作流程圖程序開始監(jiān)聽用戶查詢接受查詢使用該查詢條件查詢數(shù)據(jù)庫,然后將查詢結(jié)果封裝成數(shù)據(jù)流,以流的方式返回到客戶端。關(guān)閉與服務(wù)器的連接圖4-5服務(wù)器工作流程圖服務(wù)器除了處理登錄請求以外,還要提供客戶端的查詢共享文件請求,并將查詢到服務(wù)器工作流程圖如圖4-5:4.3系統(tǒng)各組件的聯(lián)系除了執(zhí)行它們各自的任務(wù)外,服務(wù)器、客戶端上傳下載模塊和客戶端指令監(jiān)視模塊存在一些互相聯(lián)系?;谶@種應(yīng)用的P2P計算體系,我把三種組件的聯(lián)系分類如下:●客戶端指令監(jiān)視模塊到服務(wù)器的聯(lián)系重要的共享資源的數(shù)據(jù)庫。客戶端上傳下載模塊登錄到服務(wù)器后聲明它的共享資源,它只發(fā)送文件和文件夾的位置,不是文件和文件夾的內(nèi)容。服務(wù)器要處理所有文件和文件夾及其中的內(nèi)容,從而變成了瓶頸,加上完全的文件共享和下載成為服務(wù)器的負(fù)擔(dān),導(dǎo)致性能下降。另外重要的一點就是服務(wù)器只提供在線客戶端上傳下載模塊的清單,不包4.3.2客戶端上傳下載模塊到客戶端指令監(jiān)視模塊的聯(lián)系答的關(guān)系,客戶端指令監(jiān)視模塊發(fā)送所有的請求給客戶端上傳下載模塊并接收響應(yīng)。在這種關(guān)系中,客戶端上傳下載模塊處理自身層次上的所有請求,客戶端指令監(jiān)視模塊在●客戶能夠顯示所有的共享文件和文件夾?!窨蛻敉ㄟ^發(fā)送一個下載請求給客戶端上傳下載模塊來下載內(nèi)容?!窨蛻裟軓目蛻舳松蟼飨螺d模塊的賬戶中下載文件?!癞?dāng)客戶從客戶端上傳下載模塊上下載和上載文件時,客戶端上傳下載模塊占有主動,因為它有權(quán)將共享內(nèi)容設(shè)為只讀或者可寫。這些權(quán)利作為文件夾的屬性存在,通過設(shè)置權(quán)限,客戶端上傳下載模塊可以限制有惡意的用戶上載無用信4.3.3客戶端指令監(jiān)視模塊到服務(wù)器的聯(lián)系在這種聯(lián)系中,客戶端指令監(jiān)視模塊從服務(wù)器取查這個清單和客戶端上傳下載模塊共享的資源。客戶端指令監(jiān)視模塊在取得客戶端上傳下載模塊的清單的同時,能夠傳送根搜索請求。換句話說,就是客戶端指令監(jiān)視模塊能夠為你請求的內(nèi)容搜索客戶端上傳下載模塊,并且當(dāng)客戶查詢或者請求時通知客戶所有可用的客戶端上傳下載模塊。數(shù)據(jù)庫設(shè)計(DatabaseDesign)是指對于一個給定的應(yīng)用環(huán)境,構(gòu)造最優(yōu)的數(shù)據(jù)庫模式,建立數(shù)據(jù)庫及其應(yīng)用系統(tǒng),使之能夠有效地存儲數(shù)據(jù),滿足各種用戶的應(yīng)用需求(信息要求和處理要求)。在這個系統(tǒng)中,數(shù)據(jù)庫作用十分顯著,它不但保存注冊用戶的清單,而且擴展到處理請求端搜索內(nèi)容的查詢處理。當(dāng)服務(wù)器處理已匹配這個內(nèi)容的端查詢,信息返回到請求端,搜索內(nèi)容端的搜索路徑比不帶數(shù)據(jù)庫的服務(wù)器的P2P模型要短得多。系統(tǒng)數(shù)據(jù)表設(shè)計關(guān)系如下:UserLinkTable*數(shù)據(jù)表格說明:通過前面的分析,根據(jù)系統(tǒng)的工作方式、系統(tǒng)構(gòu)架以及系統(tǒng)功能設(shè)計的要求,數(shù)據(jù)庫需要存儲的數(shù)據(jù)信息表如下:建立一張用戶在線信息表UserLinkTable,如表5-1所示表5-1用戶在線信息表UserLinkTable字段名數(shù)據(jù)類型是否可空說明用戶登錄ID用戶登錄IP用戶登錄端口用戶在線狀態(tài)用戶登錄時間建立一張共享文件信息表ShareFileTable,如表5-2所示表5-2共享文件信息表ShareFileTable字段名數(shù)據(jù)類型是否可空說明共享文件ID共享文件名共享文件MD5編碼共享文件大小共享文件上傳時間5.2系統(tǒng)界面設(shè)計界面是軟件與用戶交互的最直接的層,界面的好壞決定用戶對軟件的第一印象。而且設(shè)計良好的界面能夠引導(dǎo)用戶自己完成相應(yīng)的操作,起到向?qū)У淖饔?。同時界面如同人的面孔,具有吸引用戶的直接優(yōu)勢。設(shè)計合理的界面能給用戶帶來輕松愉悅的感受和成功的感覺,相反由于界面設(shè)計的失敗,讓用戶有挫敗感,再實用強大的功能都可能在用戶的畏懼與放棄中付諸東流。目前界面的設(shè)計引起軟件設(shè)計人員的重視的程度還遠(yuǎn)遠(yuǎn)不夠,直到最近網(wǎng)頁制作的興起,才受到專家的青睞。系統(tǒng)界面設(shè)計的特點:◆易用性:按鈕名稱應(yīng)該易懂,用詞準(zhǔn)確,屏蔽模菱兩可的字眼,要與同一界面上的其他按鈕易于區(qū)分,能望文知意最好。理想的情況是用戶不用查閱幫助就能知道該界面的功能并進行相關(guān)的正確操作?!粢?guī)范性:通常界面設(shè)計都按Windows界面的規(guī)范來設(shè)計,即包含“菜單條、工具欄、工具廂、狀態(tài)欄、滾動條、右鍵快捷菜單”的標(biāo)準(zhǔn)格式,可以說:界面遵循規(guī)范化的程度越高,則易用性相應(yīng)的就越好。小型軟件一般不提供工具廂?!艉侠硇裕浩聊粚蔷€相交的位置是用戶直視的地方,正上方四分之一處為易吸引用戶注意力的位置,在放置窗體時要注意利用這兩個位置?!裘烙^與協(xié)調(diào)性:界面應(yīng)該大小適合美學(xué)觀點,感覺協(xié)調(diào)舒適,能在有效的范圍內(nèi)吸引用戶的注意力?!舄毺匦裕喝绻晃兜淖裱瓨I(yè)界的界面標(biāo)準(zhǔn),則會喪失自己的個性.在框架符合以上規(guī)范的情況下,設(shè)計具有自己獨特風(fēng)格的界面尤為重要。下面給出此系統(tǒng)的Logo設(shè)計圖:本系統(tǒng)以友好的界面大大豐富了計算機信息的表現(xiàn)形式,以有效的方式實現(xiàn)人與計算機對話的技術(shù)。它包括機器通過輸出或顯示設(shè)備給人提供大量有關(guān)信息及提示請示等,人通過輸入設(shè)備給機器輸入有關(guān)信息及提示請示等,人通過輸入設(shè)備給機器輸入有關(guān)信息,回答問題等。下圖為本系統(tǒng)的其中一個界面:韓車工信亞牌件名Trurt海04面王啡排,新統(tǒng)血平瑞T把至力軍Fm2t0理只附標(biāo)有善注海對蝦安斷地過央減pOT00T-f-其淋大首稱信樂面白聯(lián)手干文件月聘文大公件現(xiàn)大乎行平維圖5-3系統(tǒng)界面之一5.3客戶端各模塊設(shè)計本模塊代碼保存在UFilelnfoCollect.pas文件中,主要功能是搜索所有的共享文件,包括將MD5校驗,路徑,大小等信息加到共享鏈表中。在窗體創(chuàng)建的時候就創(chuàng)建一個該線程類的實例,創(chuàng)建后的實例會不影響主線程的操作的情況下,遍歷所有共享文件,并對共享文件作相關(guān)操作。本模塊涉及兩個關(guān)鍵技術(shù):文件搜索,文件MD5校驗。文件搜索指遍歷一個文件夾或某個硬盤分區(qū),包括該文件夾或硬盤下面的所有文件和文件夾。為了實現(xiàn)這種算法,本系統(tǒng)采用遞歸算法。算法描述為:先遍歷某一文件夾中的文件和文件夾,將遍歷到的文件加到文件夾隊列中,將文件夾加到文件夾隊列中。在文件夾隊列中取出第一個文件夾的路徑,再次調(diào)用該算法遍歷該文件夾中的文件和文件夾,直到某文件夾的文件夾隊列為空,結(jié)束本次調(diào)用,繼續(xù)執(zhí)行上一個調(diào)用。整個算法執(zhí)行完畢即能夠遍歷完所有文件。該文件搜索算法跟樹的遞歸深度優(yōu)先算法相似。程序偽代碼如下:if(FindFirst(mainpath+*.*',faDirectory,Dirsearch)=0)thenifFindFirst(mainpath+*.*',faAnyFile,Dirsearch)=0thenResult:=Searchfile(mainpath+_文件夾隊列.St5.4本地共享文件上傳線程模塊該模塊的代碼保存在UFileShareThread.pas中,主要功能是將本地文件信息搜集線程模塊所收集的本地文件信息發(fā)送到服務(wù)器的數(shù)據(jù)庫中,本模塊涉及兩個關(guān)鍵技術(shù):在線程中發(fā)送數(shù)據(jù)。當(dāng)使用Winsock開發(fā)網(wǎng)絡(luò)應(yīng)用程序時,從Socket中讀取數(shù)據(jù)或者向Socket寫入數(shù)據(jù)都是異步發(fā)生的,這樣就不會阻斷程序中其它代碼的執(zhí)行。在收到數(shù)據(jù)時,Winsock會向應(yīng)用程序發(fā)送相應(yīng)的消息。這種訪問方式被稱作非阻塞式連接,它要求你對事件作出響應(yīng),設(shè)置狀態(tài)機,并通常還需要一個等待循環(huán)。與通常的Winsock編程方法不同的是,Indy使用了阻塞式Socket調(diào)用方式。阻塞式訪問更像是文件存取。當(dāng)你讀取數(shù)據(jù),或是寫入數(shù)據(jù)時,讀取和寫入函數(shù)將一直等到相應(yīng)的操作完成后才返回。如果在主線程中使用Indy發(fā)送本地共享文件信息到服務(wù)器,整個主窗體有可能因為Indy的阻塞而導(dǎo)致凍結(jié),即使使用Indy里面的IdAntiFreeze抗凍結(jié)組件,還是會發(fā)生凍結(jié)現(xiàn)象,只是用了抗凍結(jié)組件凍結(jié)時間會比較短。在設(shè)計過程中,本線程模塊先聲明一個TIdTCPClient類的組件作為數(shù)據(jù)成員,并在構(gòu)造函數(shù)中動態(tài)生成一個TIdTCPClient類的實例,讓該實例連接服務(wù)器后,遍歷本地共享文件信息鏈表,然后將這些信息封裝成數(shù)據(jù)流,發(fā)送到服務(wù)器中。5.5數(shù)據(jù)庫操作模塊本系統(tǒng)的代碼保存在UQueryFileThread.pas中,主要功能是操作數(shù)據(jù)庫是時候并沒有使用數(shù)據(jù)庫組件直接鏈接到數(shù)據(jù)庫中,而是將要操作數(shù)據(jù)庫的腳本封裝成數(shù)據(jù)流,以流的方式發(fā)送到服務(wù)端,由服務(wù)端接收完數(shù)據(jù)流后,按一定的數(shù)據(jù)結(jié)構(gòu)解在使用本地文件信息搜集線程模塊后,共享文件信息鏈表中可能存在很多個節(jié)點;效率比較低。正如前面所說,Indy是一個阻塞式Socket調(diào)用方式,在發(fā)送數(shù)據(jù)的時候,發(fā)一個便會阻塞一次。如果數(shù)據(jù)量小,可能沒什么覺察,如果數(shù)據(jù)量很發(fā)送容易中斷??蛻舳伺c服務(wù)器的數(shù)據(jù)通訊是使用TCP協(xié)議的,理論上不會丟包,但是在數(shù)據(jù)量比較大的情況下,有可能某一個包發(fā)送后能接收端無法收到,然后雙方互相等待,產(chǎn)生死鎖。產(chǎn)生中斷的另一個原因是本模塊是一個線程類,發(fā)送數(shù)據(jù)時是使用線程發(fā)送數(shù)據(jù)的,當(dāng)Indy阻塞式調(diào)用時間較長時,系本系統(tǒng)將數(shù)據(jù)轉(zhuǎn)化為數(shù)據(jù)流的方法為:先聲明一個TStrings類型和TStringStream類型,將數(shù)據(jù)逐個遍歷,逐個加入到TStrings中,然后使用TStringStream的構(gòu)造函數(shù)將TStrings的數(shù)據(jù)全部賦值到TStringStream中。程序偽代碼如下:procedurePackagingifCommandStr='就緒'thenIdTCPClient.WriteInteger(ShIdTCPClient.WriteStrea當(dāng)接收到數(shù)據(jù)流后,聲明一個TStrings類型,利用TStrings類型的構(gòu)造函數(shù)將流讀取到TStrings里面,然后按照一定的數(shù)據(jù)結(jié)構(gòu),逐個賦值到一個結(jié)構(gòu)體中,直到讀取完TStrings。例如要將下面的結(jié)構(gòu)體流解包://結(jié)構(gòu)體QueryResultStream:=QueryResultSize:=IdIdTCPClient.ReadStream(QueryResultSQueryResult.Text:=QueryQueryPort:=StrToInt(QueryResulQueryFName:=QueryResulQueryMDCode:=QueryResulQueryUpTime:=StrToDate(QueryResQueryFSize:=StrToInt(QueryResu5.6上傳下載模塊下載模塊是本系統(tǒng)的核心部分之一,代碼保存在UDownLoadFiles.pas中,主要功下載,文件上傳,斷點續(xù)傳。本模塊部分在上文關(guān)鍵技術(shù)中已經(jīng)介紹。下載任何文件或者文件夾的過程是由客戶端指令監(jiān)視模塊和客戶端上傳下載模塊建立,服務(wù)器就退出,客戶端指令監(jiān)視模塊和客戶端上傳下載模塊之間直接進行通信。下面用示意圖顯示了一個用戶(客戶端)通過客戶端指令監(jiān)視模塊怎樣從另一個用戶(客戶端指令監(jiān)視模塊)上下載選擇的文件。終端用戶(客戶端上傳下載模塊)從服務(wù)器的清單中選擇一個文件。應(yīng)用程序首先 桂林電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙第29頁共37頁檢查被選文件是否可以用于下載。如果文件是可用的,就要決定它要下載到的目的地細(xì)節(jié),文件名、大小和許可從存儲文件中的細(xì)節(jié)的相關(guān)數(shù)組中提取。在這以前,用戶只選擇這個被下載文件必要的信息,通過這些信息,用戶可以判斷下載是否正確。如果正確,則發(fā)下載請求給另一個用戶。用戶(客戶端上傳下載模塊)開始往流中寫數(shù)據(jù);同時,客戶端指令監(jiān)視模塊開始從同一個網(wǎng)絡(luò)流中讀數(shù)據(jù)。這樣,網(wǎng)絡(luò)流上發(fā)生雙向通信,客戶端上傳下載模塊上載文件,把文件寫到網(wǎng)絡(luò)流中,而客戶端指令監(jiān)視模塊下載文件,從同一個流中讀。客戶端指令監(jiān)視模塊讀數(shù)據(jù)塊并把文件寫到指定位置。讀和寫的操作直到整個文件下載完畢后結(jié)束少讀完數(shù)據(jù),下載過程停止。下載工作流程圖程序開始是否文件被選中從清單中得到被選中的文件獲得文件信息提取文件名,從下載信息鏈發(fā)給多個在線用戶在網(wǎng)絡(luò)上接收數(shù)據(jù)塊,并寫到文件中否結(jié)束是是否有更多的塊要讀圖5-4下載工作流程圖 桂林電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙第30頁共37頁5.6.2文件上傳上載過程也是由用戶初始化的,在客戶端指令監(jiān)視模塊的幫助下,上載文件到其他用戶(監(jiān)聽器)。和下載一樣,服務(wù)器不需要上載文件。當(dāng)用戶開始上載一個文件時,先決定所選文件或者文件夾是否有權(quán)上載。如果所選文件或者文件夾沒有權(quán)利上當(dāng)接收到上傳請求以后,會創(chuàng)建一個上傳線程類的實例,達(dá)目的。下載工作流程圖:程序開始接收到一個上傳請求請求上傳文件是否存在結(jié)束從請求消息中獲得文件MD5檢驗碼查詢本地共享信息檢驗要上傳的文件是否有排他鎖在網(wǎng)絡(luò)上發(fā)送數(shù)據(jù)塊否是否有更多的塊要讀圖5-5上載工作流程圖是6系統(tǒng)安全與測試隨著P2P的不斷完善,使用點對點下載文件越來越普及,隨之而來的是點對點網(wǎng)絡(luò)數(shù)據(jù)傳輸越來越大,網(wǎng)絡(luò)的安全性和數(shù)據(jù)的有效性變得越來越重要。因此,對現(xiàn)代信息系統(tǒng)進行信息安全保護,也不僅僅是像早期那樣只體現(xiàn)在信息傳輸過程中,而應(yīng)該體現(xiàn)在信息處理的全過程中。6.1系統(tǒng)的威脅評估計算機網(wǎng)絡(luò)系統(tǒng)的安全威脅主要來自不正確的路由攻擊、存取攻擊、行為不一致攻擊和目標(biāo)節(jié)點過載攻擊四個方面?!癫徽_的路由攻擊攻擊者通過不正確的路由,將其他節(jié)點的查找消息轉(zhuǎn)發(fā)到不正確的或者不存在的節(jié)點上。由于攻擊者可以按照正確的方式和系統(tǒng)其他節(jié)點交互,因此在其他節(jié)點看來,它是一個正常的節(jié)點,也就不能把它從路由表中刪除。而且,即使進行重傳也一樣會被攻擊者發(fā)送到不正確的節(jié)點上。經(jīng)測試,該系統(tǒng)能防止存取攻擊?!衲繕?biāo)節(jié)點過載攻擊攻擊者通過向某些特定目標(biāo)節(jié)點發(fā)送大量的垃圾分組消息,耗盡目標(biāo)節(jié)點的處理能力,這是一種拒絕服務(wù)類型的攻擊。在一段時間之后,系統(tǒng)會認(rèn)為目標(biāo)節(jié)點已經(jīng)失效退出,從而將目標(biāo)節(jié)點從系統(tǒng)中刪除。經(jīng)測試,該系統(tǒng)能防止存取攻擊。攻擊者正確地執(zhí)行查找協(xié)議,但否認(rèn)在它節(jié)點上保存有數(shù)據(jù)。也可以向外界宣稱它保存有這些數(shù)據(jù),但卻拒絕提供,使其他節(jié)點無法得到數(shù)據(jù)。經(jīng)測試,該系統(tǒng)能防止存取攻擊。●不正確的路由更新攻擊由于每個節(jié)點都是通過和其他節(jié)點進行交互來構(gòu)造自己的路由表,因此攻擊者可以向其他節(jié)點發(fā)送不正確的路由信息來破壞其他節(jié)點的路由表。這將會導(dǎo)致其他節(jié)點將查詢請求轉(zhuǎn)發(fā)到不正確的節(jié)點上。經(jīng)測試,該系統(tǒng)能防止存取攻擊。由此可見,只有對信息處理全過程實施全面的安全保密措施,才能確保信息系統(tǒng)的安全。對于共享資源而言,一方面希望實現(xiàn)資源最大程度的共享,保證數(shù)據(jù)操作的方便和實時性;另一方面也要保證特點數(shù)據(jù)的安全保密。6.2系統(tǒng)測試在軟件的定義、分析、設(shè)計過程中都會采用不同措施來保證軟件的質(zhì)量,但是在軟件實際開發(fā)過程中難免會存在問題。為盡早發(fā)現(xiàn)存在的問題,必須對軟件進行充分的測試。軟件測試的主要過程是,根據(jù)軟件開發(fā)各階干測試用例。(1)測試人員測試隊伍由兩位成員組成。軟件的設(shè)計者在測試整個過程中負(fù)責(zé)整體測試方案的制定和測試進度的掌握,以及白盒測試的測試者。第二位成員由未參加軟件制做者擔(dān)任,主要責(zé)任是進行軟件的黑盒測試以及軟件環(huán)境,硬件要求和極限測試工作。(2)機器測試通過在計算機上直接運行被測程序,來發(fā)現(xiàn)程序中的錯誤。機器測試包括黑盒測試和白盒測試。黑盒測試也稱功能測試,將軟件看作黑盒子,在完全不考慮程序的內(nèi)部結(jié)構(gòu)和特性的情況下,研究軟件的外部特性。根據(jù)軟件的需求規(guī)格說明書測試用例,從程序的輸入和輸出特性上測試是否滿足設(shè)定的功能。白盒測試也稱結(jié)構(gòu)測試,將軟件看作一個透明的白盒子,按照程序的內(nèi)部結(jié)構(gòu)和處理邏輯來選定測試用例,對軟件的邏輯路6.2.2測試內(nèi)容①軟件的正常運行、關(guān)閉及退出時保存記錄的提示(默認(rèn)為是)。②用戶登錄界面友好,可操作性及安全性能較好,能對不同管理級別者進③數(shù)據(jù)庫的可維護性好,數(shù)據(jù)的錄入、刪除及更改均能順利完成,并能實現(xiàn)動態(tài)更新。④數(shù)據(jù)查詢便捷,能對各種不同的查詢條件進行搜索,以找到最合適的答案。⑤數(shù)據(jù)溢出、越界均能進行非法提示,以警告用戶正確使用。對用戶的非正常操作方式也提

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論