BT下載工具的設(shè)計和實現(xiàn)本科畢業(yè)論文_第1頁
BT下載工具的設(shè)計和實現(xiàn)本科畢業(yè)論文_第2頁
BT下載工具的設(shè)計和實現(xiàn)本科畢業(yè)論文_第3頁
BT下載工具的設(shè)計和實現(xiàn)本科畢業(yè)論文_第4頁
BT下載工具的設(shè)計和實現(xiàn)本科畢業(yè)論文_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、bt下載工具設(shè)計與實現(xiàn)畢業(yè)設(shè)計(論文)原創(chuàng)性聲明和使用授權(quán)說明原創(chuàng)性聲明本人鄭重承諾:所呈交的畢業(yè)設(shè)計(論文),是我個人在指導(dǎo)教師的指導(dǎo)下進(jìn)行的研究工作及取得的成果。盡我所知,除文中特別加以標(biāo)注和致謝的地方外,不包含其他人或組織已經(jīng)發(fā)表或公布過的研究成果,也不包含我為獲得 及其它教育機(jī)構(gòu)的學(xué)位或?qū)W歷而使用過的材料。對本研究提供過幫助和做出過貢獻(xiàn)的個人或集體,均已在文中作了明確的說明并表示了謝意。作 者 簽 名: 日 期: 指導(dǎo)教師簽名: 日期: 使用授權(quán)說明本人完全了解 大學(xué)關(guān)于收集、保存、使用畢業(yè)設(shè)計(論文)的規(guī)定,即:按照學(xué)校要求提交畢業(yè)設(shè)計(論文)的印刷本和電子版本;學(xué)校有權(quán)保存畢業(yè)設(shè)計

2、(論文)的印刷本和電子版,并提供目錄檢索與閱覽服務(wù);學(xué)??梢圆捎糜坝?、縮印、數(shù)字化或其它復(fù)制手段保存論文;在不以贏利為目的前提下,學(xué)校可以公布論文的部分或全部內(nèi)容。作者簽名: 日 期: 學(xué)位論文原創(chuàng)性聲明本人鄭重聲明:所呈交的論文是本人在導(dǎo)師的指導(dǎo)下獨立進(jìn)行研究所取得的研究成果。除了文中特別加以標(biāo)注引用的內(nèi)容外,本論文不包含任何其他個人或集體已經(jīng)發(fā)表或撰寫的成果作品。對本文的研究做出重要貢獻(xiàn)的個人和集體,均已在文中以明確方式標(biāo)明。本人完全意識到本聲明的法律后果由本人承擔(dān)。作者簽名: 日期: 年 月 日學(xué)位論文版權(quán)使用授權(quán)書本學(xué)位論文作者完全了解學(xué)校有關(guān)保留、使用學(xué)位論文的規(guī)定,同意學(xué)校保留并向

3、國家有關(guān)部門或機(jī)構(gòu)送交論文的復(fù)印件和電子版,允許論文被查閱和借閱。本人授權(quán) 大學(xué)可以將本學(xué)位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進(jìn)行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存和匯編本學(xué)位論文。涉密論文按學(xué)校規(guī)定處理。作者簽名:日期: 年 月 日導(dǎo)師簽名: 日期: 年 月 日注 意 事 項1.設(shè)計(論文)的內(nèi)容包括:1)封面(按教務(wù)處制定的標(biāo)準(zhǔn)封面格式制作)2)原創(chuàng)性聲明3)中文摘要(300字左右)、關(guān)鍵詞4)外文摘要、關(guān)鍵詞 5)目次頁(附件不統(tǒng)一編入)6)論文主體部分:引言(或緒論)、正文、結(jié)論7)參考文獻(xiàn)8)致謝9)附錄(對論文支持必要時)2.論文字?jǐn)?shù)要求:理工類設(shè)計(論文)正文字?jǐn)?shù)不少于

4、1萬字(不包括圖紙、程序清單等),文科類論文正文字?jǐn)?shù)不少于1.2萬字。3.附件包括:任務(wù)書、開題報告、外文譯文、譯文原文(復(fù)印件)。4.文字、圖表要求:1)文字通順,語言流暢,書寫字跡工整,打印字體及大小符合要求,無錯別字,不準(zhǔn)請他人代寫2)工程設(shè)計類題目的圖紙,要求部分用尺規(guī)繪制,部分用計算機(jī)繪制,所有圖紙應(yīng)符合國家技術(shù)標(biāo)準(zhǔn)規(guī)范。圖表整潔,布局合理,文字注釋必須使用工程字書寫,不準(zhǔn)用徒手畫3)畢業(yè)論文須用a4單面打印,論文50頁以上的雙面打印4)圖表應(yīng)繪制于無格子的頁面上5)軟件工程類課題應(yīng)有程序清單,并提供電子文檔5.裝訂順序1)設(shè)計(論文)2)附件:按照任務(wù)書、開題報告、外文譯文、譯文原

5、文(復(fù)印件)次序裝訂指導(dǎo)教師評閱書指導(dǎo)教師評價:一、撰寫(設(shè)計)過程1、學(xué)生在論文(設(shè)計)過程中的治學(xué)態(tài)度、工作精神 優(yōu) 良 中 及格 不及格2、學(xué)生掌握專業(yè)知識、技能的扎實程度 優(yōu) 良 中 及格 不及格3、學(xué)生綜合運(yùn)用所學(xué)知識和專業(yè)技能分析和解決問題的能力 優(yōu) 良 中 及格 不及格4、研究方法的科學(xué)性;技術(shù)線路的可行性;設(shè)計方案的合理性 優(yōu) 良 中 及格 不及格5、完成畢業(yè)論文(設(shè)計)期間的出勤情況 優(yōu) 良 中 及格 不及格二、論文(設(shè)計)質(zhì)量1、論文(設(shè)計)的整體結(jié)構(gòu)是否符合撰寫規(guī)范? 優(yōu) 良 中 及格 不及格2、是否完成指定的論文(設(shè)計)任務(wù)(包括裝訂及附件)? 優(yōu) 良 中 及格 不及格

6、三、論文(設(shè)計)水平1、論文(設(shè)計)的理論意義或?qū)鉀Q實際問題的指導(dǎo)意義 優(yōu) 良 中 及格 不及格2、論文的觀念是否有新意?設(shè)計是否有創(chuàng)意? 優(yōu) 良 中 及格 不及格3、論文(設(shè)計說明書)所體現(xiàn)的整體水平 優(yōu) 良 中 及格 不及格建議成績: 優(yōu) 良 中 及格 不及格(在所選等級前的內(nèi)畫“”)指導(dǎo)教師: (簽名) 單位: (蓋章)年 月 日評閱教師評閱書評閱教師評價:一、論文(設(shè)計)質(zhì)量1、論文(設(shè)計)的整體結(jié)構(gòu)是否符合撰寫規(guī)范? 優(yōu) 良 中 及格 不及格2、是否完成指定的論文(設(shè)計)任務(wù)(包括裝訂及附件)? 優(yōu) 良 中 及格 不及格二、論文(設(shè)計)水平1、論文(設(shè)計)的理論意義或?qū)鉀Q實際問題

7、的指導(dǎo)意義 優(yōu) 良 中 及格 不及格2、論文的觀念是否有新意?設(shè)計是否有創(chuàng)意? 優(yōu) 良 中 及格 不及格3、論文(設(shè)計說明書)所體現(xiàn)的整體水平 優(yōu) 良 中 及格 不及格建議成績: 優(yōu) 良 中 及格 不及格(在所選等級前的內(nèi)畫“”)評閱教師: (簽名) 單位: (蓋章)年 月 日 上海復(fù)旦大學(xué)畢業(yè)設(shè)計(論文)用紙教研室(或答辯小組)及教學(xué)系意見教研室(或答辯小組)評價:一、答辯過程1、畢業(yè)論文(設(shè)計)的基本要點和見解的敘述情況 優(yōu) 良 中 及格 不及格2、對答辯問題的反應(yīng)、理解、表達(dá)情況 優(yōu) 良 中 及格 不及格3、學(xué)生答辯過程中的精神狀態(tài) 優(yōu) 良 中 及格 不及格二、論文(設(shè)計)質(zhì)量1、論文(

8、設(shè)計)的整體結(jié)構(gòu)是否符合撰寫規(guī)范? 優(yōu) 良 中 及格 不及格2、是否完成指定的論文(設(shè)計)任務(wù)(包括裝訂及附件)? 優(yōu) 良 中 及格 不及格三、論文(設(shè)計)水平1、論文(設(shè)計)的理論意義或?qū)鉀Q實際問題的指導(dǎo)意義 優(yōu) 良 中 及格 不及格2、論文的觀念是否有新意?設(shè)計是否有創(chuàng)意? 優(yōu) 良 中 及格 不及格3、論文(設(shè)計說明書)所體現(xiàn)的整體水平 優(yōu) 良 中 及格 不及格評定成績: 優(yōu) 良 中 及格 不及格教研室主任(或答辯小組組長): (簽名)年 月 日教學(xué)系意見:系主任: (簽名)年 月 日摘 要bittorrent是當(dāng)今internet上非常流行的基于p2p技術(shù)的內(nèi)容分發(fā)系統(tǒng),它能夠快速、有

9、效地在internet的網(wǎng)絡(luò)結(jié)點上分發(fā)大的文件,而不會給源服務(wù)器帶來過大負(fù)載。bittorrent協(xié)議是一個網(wǎng)絡(luò)文件傳輸協(xié)議,它能夠?qū)崿F(xiàn)點對點文件分享的技術(shù)。bittorrent協(xié)議是用在對等網(wǎng)絡(luò)中文件分享的網(wǎng)絡(luò)協(xié)議程序,它是用戶群對用戶群,下載同一文件的人越多,且下載后,繼續(xù)維持上傳的狀態(tài),就可以分享,成為其用戶端節(jié)點下載的種子文件,下載該檔案的速度越快。本文的主要工作內(nèi)容:深入研究了bittorrent協(xié)議及bittorrent協(xié)議的工作原理,qt的信號與槽機(jī)制,種子文件的解析過程,客戶端和tracker服務(wù)器通信,peer與peer之間的通信,dht網(wǎng)絡(luò)的實現(xiàn)方法以及bt的關(guān)鍵學(xué)法和策略

10、,對軟件的系統(tǒng)設(shè)計進(jìn)行論述。 關(guān)鍵字:bittorrent協(xié)議;信號與槽機(jī)制;torrent文件解析;iiibt download tool design and realizationabstractbittorrent is very popular in todays internet-based p2p content distribution system technology, it is able to quickly and efficiently distribute large files over the network nodes of the internet, ra

11、ther than the source server will bring excessive load. bittorrent protocol is a network file transfer protocol that enables peer file sharing technology. bittorrent protocol is used in peer to peer network file sharing network protocol procedures, it is the user group for users, download the same fi

12、le more people, and after downloading, continue to maintain the status of the upload, you can share, as its clients node torrent file, download the file faster. the main content of the paper: in-depth study of the working principle of the bittorrent protocol and bittorrent protocol for communication

13、, dht network qt signals and slots mechanism, the seed file parsing process, the client and server communications tracker, peer and peer between bts key methods and the study of law and policy, the system design software are discussed.key words:the bittorrent protocol;signal and slot mechanism;torre

14、nt file parsing;目 錄摘 要iabstractii1 緒論11.1 國內(nèi)外bittorrent的發(fā)展?fàn)顩r11.2 發(fā)展bittorrent的目的和意義11.2.1 發(fā)展bittorrent的目的11.2.2 發(fā)展bittorrent的意義12 bittorrent的原理分析22.1 綜述bittorrent的相關(guān)技術(shù)22.1.1 bittorrent協(xié)議22.1.2 bittorrent的專業(yè)術(shù)語22.1.3 種子的解析32.1.4 bittorrent運(yùn)行原理62.1.5 bittorrent下載流程72.1.6 bittorrent協(xié)議的發(fā)展72.2 bittorrent的

15、軟件要求82.2.1 軟件系統(tǒng)設(shè)計要求82.2.2 軟件系統(tǒng)實現(xiàn)83 需求分析103.1 種子文件解析功能分析103.2 tracker服務(wù)器功能分析103.3 torrent服務(wù)器功能分析103.4 軟件需求分析104 概要設(shè)計114.1.1 種子解析模塊114.1.2 連接模塊114.1.3 peer管理模塊114.1.4 出錯處理模塊114.1.5 窗口界面模塊115 詳細(xì)設(shè)計135.1 系統(tǒng)功能模塊135.2 qt的信號與槽機(jī)制145.3 bt的算法與策略195.3.1 阻塞算法195.3.2 超級種子算法195.3.3 結(jié)束算法205.3.4 防冷落算法205.3.5 最佳無阻塞算法

16、205.3.6 最稀有算法215.4 bt軟件的模塊的實現(xiàn)215.4.1 種子解析模塊的實現(xiàn)2115.4.2 client與traceker通信模塊的實現(xiàn)215.4.3 peer之間的通信模塊的實現(xiàn)225.4.4 軟件出錯模塊的實現(xiàn)225.4.5 下載任務(wù)狀態(tài)的實現(xiàn)225.4.6 軟件主界面模塊的實現(xiàn)225.5 代碼實現(xiàn)245.5.1 添加種子代碼245.5.2 解析種子代碼255.5.3 peer通信代碼275.5.4 窗體中任務(wù)代碼276 系統(tǒng)測試326.1 測試概述326.2 測試特性326.3 測試種類33結(jié)論34參考文獻(xiàn)35致謝36外文原文37中文翻譯4921 緒論1.1 國內(nèi)外bi

17、ttorrent的發(fā)展?fàn)顩r說到bittorrent可能有人還不知道是什么東西,但是說到種子可謂是無人不知無人不曉啊!那么在這個下載過程是通過什么支撐的,或者說下載客戶端與服務(wù)器之間是怎么預(yù)定通信的呢,那就是bittorrent協(xié)議,用來進(jìn)行對種子文件管理和規(guī)范。bittorrent協(xié)議是一個網(wǎng)絡(luò)文件傳輸協(xié)議,它能夠?qū)崿F(xiàn)點對點文件分享的技術(shù)。比起其他點對點的協(xié)議,它更有多點對多點的特性,這個特點簡單的說就是:下載的人越多,速度越快。下載完不馬上關(guān)閉bittorrent軟件,就可以成為種子即擁有完整的檔案者分流讓其他人下載,或者說bittorrent一種分發(fā)文件的協(xié)議。它通過url來識別內(nèi)容,并且

18、可以無縫的和web進(jìn)行交互。它基于http協(xié)議,它的優(yōu)勢是:如果有多個下載者并發(fā)的下載同一個文件,那么,每個下載者也同時為其它下載者上傳文件,這樣,文件源可以支持大量的用戶進(jìn)行下載,而只帶來適當(dāng)?shù)呢?fù)載的增長。1.2 發(fā)展bittorrent的目的和意義1.2.1 發(fā)展bittorrent的目的 bittorrent是一種p2p模式,對于p2p模式相對c/s模式,具有很多優(yōu)點,但是隨著p2p應(yīng)用的不斷增多,p2p技術(shù)也開始面臨一些問題,例如路由效率低下、維護(hù)開銷過大、系統(tǒng)穩(wěn)定性差、安全性無法保證以及服務(wù)不可靠等問題。因此,在提高現(xiàn)有p2p網(wǎng)絡(luò)資源定位的效率,降低其維護(hù)開銷,增強(qiáng)p2p系統(tǒng)的穩(wěn)定與

19、安全性,提高p2p各個節(jié)點提供服務(wù)的可靠性等方面都需要做深入的研究。深入研究p2p資源定位技術(shù)有重要的理論和現(xiàn)實意義。一方面,隨著p2p應(yīng)用的不斷增長,p2p資源定位技術(shù)遇到的一系列問題迫切需要我們對它進(jìn)行更加深入的研究,這將有助于它的進(jìn)一步推廣和使用;另一方面,把p2p資源定位技術(shù)與其它的技術(shù)相結(jié)合,可以達(dá)到相互促進(jìn)的效果,如把p2p資源定位技術(shù)引入到通訊領(lǐng)域,把p2p資源定位技術(shù)與網(wǎng)格技術(shù)相結(jié)合,都可以促進(jìn)彼此的發(fā)展。1.2.2 發(fā)展bittorrent的意義發(fā)展bittorrent的意義對于大多數(shù)網(wǎng)民是不言而喻的。在平時的生活或?qū)W習(xí)大多數(shù)下載是下載一些音樂,電影和一些軟件,尤其是電影,現(xiàn)

20、在是已經(jīng)進(jìn)入了高清時代,一部高清電影動輒幾個g,在中國的平均網(wǎng)速相對發(fā)達(dá)國家相對較低的情況下,在以前沒有bt技術(shù)前,要下載高清電影簡直是想都不敢想,占有很高的帶寬,文件大,下載時間延長,勢必會影響其他工作,而有了bt的迅速發(fā)展,通過互聯(lián)網(wǎng)用戶下載這個影片的數(shù)量大大加增,下載用戶越多,速度越快!甚至有些公司提供離線下載服務(wù),公司通過強(qiáng)大的服務(wù)器先通過bittorrent協(xié)議把文件先下載到公司服務(wù)器,然后用戶再從服務(wù)器取回到本地,可靠且速度快。bitorrent技術(shù)廣泛應(yīng)用與電視直播,網(wǎng)絡(luò)視頻和在線游戲中。很多網(wǎng)絡(luò)游戲的在線更新,比如說如魔獸世界就是采用bt的技術(shù),所以當(dāng)每次有改版時,動輒數(shù)百mb

21、的更新包,通過游戲廠商所提供的更新程序,以bittorrent協(xié)議的方式進(jìn)行下載分流。這為以往的其他種在線游戲,每次重大改版就必須重新壓制光盤,或是等待單一下載點的下載方式,帶來另一種節(jié)省成本的經(jīng)營模式。2 bittorrent的原理分析2.1 綜述bittorrent的相關(guān)技術(shù)2.1.1 bittorrent協(xié)議對于普通的httpftp下載使用tcp/ip協(xié)議,bittorrent協(xié)議是架構(gòu)于tcp/ip協(xié)議之上的一個p2p文件傳輸協(xié)議,處于tcp/ip結(jié)構(gòu)的應(yīng)用層。 bittorrent協(xié)議本身也包含了很多具體的內(nèi)容協(xié)議和擴(kuò)展協(xié)議,并在不斷擴(kuò)充中。根據(jù)bittorrent協(xié)議,文件發(fā)布者會

22、根據(jù)要發(fā)布的文件生成提供一個.torrent文件,即種子文件,也簡稱為“種子”,可以通過一些種子軟件進(jìn)行種子文件生成。種子文件本質(zhì)上是文本文件,文本的內(nèi)容包含tracker信息和文件信息兩部分。tracker信息主要是bt下載中需要用到的tracker服務(wù)器的地址和針對tracker服務(wù)器的設(shè)置,也就是下載軟件通過解析種子文件,通過tracker信息然后和tracker建立連接,進(jìn)行通信,從服務(wù)器獲取到peer的列表,即你從其他客戶端下載文件時建立連接需要的信息,同時也把你的主機(jī)的信息上傳到tracker供其他客戶端下載。文件信息是根據(jù)對目標(biāo)文件的計算生成的,即根據(jù)bittorrent協(xié)議內(nèi)的

23、bencode規(guī)則進(jìn)行提供下載文件進(jìn)行編碼。主要是把提供下載的文件虛擬分成大小相等的塊,塊大小必須為2k的整數(shù)次方,由于是虛擬分塊,硬盤上并不產(chǎn)生各個塊文件,并把每個塊的索引信息和hash驗證碼寫入種子文件中,確保塊不被重復(fù)下載所以,種子文件就是被下載文件的“索引”。下載時,bt客戶端首先解析種子文件得到tracker地址,然后連接tracker服務(wù)器。tracker服務(wù)器回應(yīng)下載者的請求,提供下載者其他下載者包括發(fā)布者的ip。下載者再連接其他下載者,根據(jù)種子文件,兩者分別告知對方自己已經(jīng)有的塊,然后交換對方所沒有的數(shù)據(jù)。此時不需要其他服務(wù)器參與,分散了單個線路上的數(shù)據(jù)流量,因此減輕了服務(wù)器負(fù)

24、擔(dān)。下載者每得到一個塊,需要算出下載塊的hash驗證碼與種子文件中的對比,如果一樣則說明塊正確,不一樣則需要重新下載這個塊。這種規(guī)定是為了解決下載內(nèi)容準(zhǔn)確性的問題。一般的http/ftp下載,發(fā)布文件僅在某個或某幾個服務(wù)器,下載的人太多,服務(wù)器的帶寬很易不勝負(fù)荷,變得很慢。而bittorrent協(xié)議下載的特點是,下載的人越多,提供的帶寬也越多,下載速度就越快。同時,擁有完整文件的用戶也會越來越多,使文件的“壽命”不斷延長。為了解決某些用戶“下完就跑”的現(xiàn)象,在非官方bittorrent協(xié)議中還存在一種慢慢開放下載內(nèi)容的超級種子的算法。2.1.2 bittorrent的專業(yè)術(shù)語tracker:收

25、集下載者信息的服務(wù)器,并將此信息提供給其他下載者,使下載者們相互連接起來,傳輸數(shù)據(jù)。種子:指一個下載任務(wù)中所有文件都被某下載者完整的下載,此時下載者成為一個種子。發(fā)布者本身發(fā)布的文件就是原始種子。也指.torrent文件。做種:發(fā)布者提供下載任務(wù)的全部內(nèi)容的行為;下載者下載完成后繼續(xù)提供給他人下載的行為。2.1.3 種子的解析如圖所示為種子文件內(nèi)容。圖2-1 bt種子文件結(jié)構(gòu)圖bt種子文件使用了一種叫bencoding的編碼方法來保存數(shù)據(jù)。bencoding現(xiàn)有四種類型的數(shù)據(jù):strings(字符串),integers(整數(shù)),lists(列表),dictionaries(字典)(1)stri

26、ngs(字符串)編碼為:例如:4:test 表示為字符串test,表示長度為4個字節(jié)的字符串teststrings類型是沒有沒開始或結(jié)束標(biāo)記(2)integers(整數(shù))編碼為:ie開始標(biāo)記i,結(jié)束標(biāo)記為e例如:i1234e 表示為整數(shù)1234 i-1234e 表示為整數(shù)-1234整數(shù)沒有大小限制(3)lists(列表)編碼為:le開始標(biāo)記為l,結(jié)束標(biāo)記為e列表里可以包含任何bencoding編碼類型,包括整數(shù),字符串,列表,字典。例如: l4:test5:abcdee 表示為二個字符串test,abcde(4)dictionaries(字典)編碼為de開始標(biāo)記為d,結(jié)束標(biāo)記為e關(guān)鍵字必須為b

27、encoding字符串值可以為任何bencoding編碼類型例如:d3:agei20ee 表示為age=20d4:path3:c:8:filename8:test.txt表示為path=c:,filename=test.txt(5)具體文件結(jié)構(gòu)如下:全部內(nèi)容必須都為bencoding編碼類型。整個文件為一個字典結(jié)構(gòu),包含如下關(guān)鍵字announce:tracker服務(wù)器的url(字符串)announce-list(可選):備用tracker服務(wù)器列表(列表)creation date(可選):種子創(chuàng)建的時間,unix標(biāo)準(zhǔn)時間comment(可選):備注(字符串)created by(可選):創(chuàng)建

28、人或創(chuàng)建程序的信息(字符串)info:一個字典結(jié)構(gòu),包含文件的主要信息,分為單文件結(jié)構(gòu)或多文件結(jié)構(gòu)。單文件結(jié)構(gòu):length:文件長度,單位字節(jié)(整數(shù))md5sum(可選):長32個字符的文件的md5校驗(字符串)name:文件名(字符串)piece length:每個塊的大小,單位字節(jié)(整數(shù))pieces:每個塊的20個字節(jié)的sha1 hash的值(二進(jìn)制格式)多文件結(jié)構(gòu)如下:files:一個字典結(jié)構(gòu)length:文件長度,單位字節(jié)(整數(shù))md5sum(可選):同單文件結(jié)構(gòu)中相同path:文件的路徑和名字,是一個列表結(jié)構(gòu)name:最上層的目錄名字(字符串)piece length:同單文件結(jié)

29、構(gòu)中相同pieces:同單文件結(jié)構(gòu)中相同綜上,多文件torrent的結(jié)構(gòu)的樹形圖。圖2-2 多文件結(jié)構(gòu)圖圖2-3 單文件結(jié)構(gòu)圖2.1.4 bittorrent運(yùn)行原理bt原理普通的http/ftp下載使用tcp/ip協(xié)議,bittorrent協(xié)議是架構(gòu)于tcp/ip協(xié)議之上的一個p2p文件傳輸協(xié)議,處于tcp/ip結(jié)構(gòu)的應(yīng)用層。bittorrent協(xié)議本身也包含了很多具體的內(nèi)容協(xié)議和擴(kuò)展協(xié)議,并在不斷擴(kuò)充中。根據(jù)bittorrent協(xié)議,文件發(fā)布者會根據(jù)要發(fā)布的文件生成提供一個.torrent文件,即種子文件,也簡稱為“種子”。torrent文件本質(zhì)上是文本文件,包含tracker信息和文件信

30、息兩部分。tracker信息主要是bt下載中需要用到的tracker服務(wù)器的地址和針對tracker服務(wù)器的設(shè)置,文件信息是根據(jù)對目標(biāo)文件的計算生成的,計算結(jié)果根據(jù)bittorrent協(xié)議內(nèi)的b編碼規(guī)則進(jìn)行編碼。它的主要原理是需要把提供下載的文件虛擬分成大小相等的塊,塊大小必須為2k的整數(shù)次方,由于是虛擬分塊,硬盤上并不產(chǎn)生各個塊文件,并把每個塊的索引信息和hash驗證碼寫入.torrent文件中;所以,種子文件就是被下載文件的“索引”。下載者要下載文件內(nèi)容,需要先得到相應(yīng)的.torrent文件,然后使用bt客戶端軟件進(jìn)行下載。下載時,bt客戶端首先解析.torrent文件得到tracker地

31、址,然后連接tracker服務(wù)器。tracker服務(wù)器回應(yīng)下載者的請求,提供下載者其他下載者(包括發(fā)布者)的ip。下載者再連接其他下載者,根據(jù).torrent文件,兩者分別對方告知自己已經(jīng)有的塊,然后交換對方?jīng)]有的數(shù)據(jù)。此時不需要其他扮演服務(wù)器參與,分散了單個線路上的數(shù)據(jù)流量,因此減輕了服務(wù)器負(fù)擔(dān)。下載者每得到一個塊,需要算出下載塊的hash驗證碼與.torrent文件中的對比,如果一樣則說明塊正確,不一樣則需要重新下載這個塊。這種規(guī)定是為了解決下載內(nèi)容準(zhǔn)確性的問題。一般的http/ftp下載,發(fā)布文件僅在某個或某幾個服務(wù)器,下載的人太多,服務(wù)器的帶寬很易不勝負(fù)荷,變得很慢。而bittorre

32、nt協(xié)議下載的特點是,下載的人越多,提供的帶寬也越多,種子也會越來越多,下載速度就越快。而有些人下載完成后關(guān)掉下載任務(wù),提供較少量數(shù)據(jù)給其他用戶,為盡量避免這種行為,在非官方bittorrent協(xié)議中存在超級種子的算法。這種算法允許文件發(fā)布者分幾步發(fā)布文件,發(fā)布者不需要一次提供文件所有內(nèi)容,而是慢慢開放的下載內(nèi)容的比例,延長下載時間。此時,速度快的人由于未下載完必須提供給他人數(shù)據(jù),速度慢的人有更多機(jī)會得到數(shù)據(jù)。2.1.5 bittorrent下載流程在整個下載過程,tracker服務(wù)器一個不可缺少的角色,它不同的下載者之間搭了一個橋梁,下載者在下載開始以及下載進(jìn)行的過程中,要不停的與track

33、er服務(wù)器進(jìn)行通信,以匯報自己的信息,并獲取其它下載client的信息。這種通信是通過http協(xié)議進(jìn)行的,又被稱為tracker http協(xié)議,它的過程是這樣的:client向tracker發(fā)一個http的get請求,并把它自己的信息放在get的參數(shù)中;這個請求的大致意思是:我是xxx,我想下載yyy文件,我的ip是aaa,我用的端口是bbb。tracker對所有下載者的信息進(jìn)行維護(hù),當(dāng)它收到一個請求后,首先把對方的信息記錄下來,如果已經(jīng)記錄在案,那么就檢查是否需要更新,然后將一部分,并非全部,根據(jù)設(shè)置的參數(shù)已經(jīng)下載者的請求參與下載同一個文件,一個tracker服務(wù)器可能同時維護(hù)多個文件的下載

34、,的下載者的信息返回給對方。client在收到tracker的響應(yīng)后,就能獲取其它下載者的信息,那么它就可以根據(jù)這些信息,與其它下載者建立連接,從它們那里下載文件片斷。2.1.6 bittorrent協(xié)議的發(fā)展最新的dht網(wǎng)絡(luò)技術(shù),使得無tracker下載成為可能。dht(distributed hash table,分布式哈希表)類似tracker的根據(jù)種子特征碼返回種子信息的網(wǎng)絡(luò)。dht全稱叫分布式哈希表(distributed hash table),是一種分布式存儲方法。在不需要服務(wù)器的情況下,每個客戶端負(fù)責(zé)一個小范圍的路由,并負(fù)責(zé)存儲一小部分?jǐn)?shù)據(jù),從而實現(xiàn)整個dht網(wǎng)絡(luò)的尋址和存儲。

35、新版bitcomet允許同行連接dht網(wǎng)絡(luò)和tracker,也就是說在完全不連上tracker服務(wù)器的情況下,也可以很好的下載,因為它可以在dht網(wǎng)絡(luò)中尋找下載同一文件的其他用戶。有些軟件(比特精靈)還會自動通過dht搜索種子資源,構(gòu)成種子市場。這種技術(shù)好處十分明顯,就是大大減輕了tracker的負(fù)擔(dān)。用戶之間可以更快速建立通訊。對越每一個連入dht網(wǎng)絡(luò)的計算機(jī)就稱為一個網(wǎng)絡(luò)節(jié)點,每一個節(jié)點,都會得到一個獨一無二的id,相當(dāng)于dht網(wǎng)絡(luò)的身份表示,當(dāng)然這個id的計算方法有很多種方法,所以就有各種各樣的dht的實現(xiàn)方式,其中最自然的一種方法就是用他公網(wǎng)上的ip來做id的計算原形,因為每個主機(jī)的i

36、p地址這是獨一無二的也是個唯一標(biāo)示,當(dāng)然一個計算機(jī)也可能有多個網(wǎng)卡,在dht網(wǎng)絡(luò)中每一個節(jié)點保存了帶下載的一部分的資源那么,整個dht的網(wǎng)絡(luò)就是一個大的容器,里面存放了一定的資料,即整個dht網(wǎng)絡(luò)保存著待下載軟件的所有內(nèi)容,對于網(wǎng)絡(luò)中的節(jié)點資源是共享的,但由于數(shù)據(jù)在各個節(jié)點上是分散的,每個節(jié)點上的資源還會變化,所以問題來了,如何找到特定的資源存在于某個節(jié)點上,好去索取。在此之前,曾經(jīng)有許多的方法,來解決這個,問題比如最早的napster,就是一個巨大的集中式索引服務(wù)器,里面存放了所有的資源的位置,這是一個很直觀的解決方案,通過索引來查找資源,但是簡單的方法雖然有效,也很脆弱,比如他的服務(wù)器萬一

37、掛掉了,整個napster網(wǎng)絡(luò)就完蛋了,而且,所有的資源在一起,整個服務(wù)器的負(fù)擔(dān)隨著資源的增多而越來越多,最后臃腫不堪,所以后來就出現(xiàn)了另一種解決方案,叫做全分布式非結(jié)構(gòu)化網(wǎng)絡(luò),走了另一個極端,完全不要中心服務(wù)器,每一個節(jié)點維護(hù)一個鄰居列表,類似路由器中路由表,告訴你下載的資源到哪去找,這樣如果要找一個東西就問鄰居,鄰居再問鄰居,只要有,總有一天被問到答案,這就是泛洪式搜索,的確在網(wǎng)絡(luò)路由上掀起了一片數(shù)據(jù)洪水,最有名的就是gnutella協(xié)議,當(dāng)初我在分析shareaza的時候就遇到這個協(xié)議了,當(dāng)時一頭霧水,現(xiàn)在看來這個協(xié)議還被做為bt協(xié)議的一個補(bǔ)充在被使用著.還有一種解決方案就是綜合上述兩者

38、的優(yōu)點,設(shè)置一些超級節(jié)點,這些節(jié)點就好象napster上的中心服務(wù)器,里面存放了大量的索引信息,這就叫做半分布式結(jié)構(gòu),現(xiàn)在流行的bt就是這種技術(shù),混血的就是強(qiáng)大。我這里講的dht卻是一個完全分布式結(jié)構(gòu)化拓?fù)渚W(wǎng)絡(luò),是一個完全不需要中心服務(wù)器的網(wǎng)絡(luò)拓?fù)?然而比非結(jié)構(gòu)化的要有更好的搜索機(jī)制,不用泛洪,目前沒有bt應(yīng)用的那么廣,不過大家應(yīng)該注意到了bt和電騾都先后加入了dht網(wǎng)絡(luò),說明這個網(wǎng)絡(luò)還是很有潛力的,作為bt或者電騾協(xié)議的一種補(bǔ)充手段,讓你下載的時候,能夠找到更多的源,提升了性能,而且完全不需要中心服務(wù)器,也是他的一個優(yōu)點,這個網(wǎng)絡(luò)有這樣的功能,因為他是凝聚了一定的智慧的,不是象上面的那些都是

39、很直觀的解決方案,所以他們都不夠強(qiáng)大dht利用了一個小聰明,把節(jié)點的id給利用了起來,簡單的說,就是把要找的資源,通過hash算法得到一個規(guī)范的key,把這個key和資源合在一起,就是一個信息,把這個信息放在和key一樣或者距離最近的那個id節(jié)點上,這樣你知道自己要找什么,用hash算法得到key,然后就在dht網(wǎng)絡(luò)里發(fā)布搜索信息,指明要和key一樣的id的節(jié)點,由于每一個節(jié)點都維護(hù)了一個其他節(jié)點的表,所以很快就能找到所要的東西,研究表明,找到所花費的尋址路徑長度和每個節(jié)點所保存的鄰居節(jié)點的個數(shù)有漸進(jìn)曲線關(guān)系,所以只要說到這一層dht的奧秘就一目了然了。2.2 bittorrent的軟件要求2

40、.2.1 軟件系統(tǒng)設(shè)計要求設(shè)計一款功能齊備的bittorrent下載軟件,具體要求如下:(1)能夠?qū)崿F(xiàn)對.torrent文件的解析并且顯示出來(2)實現(xiàn)對任務(wù)的添加,開始,暫停,刪除(3)實現(xiàn)多任務(wù)多線程下載(4)實現(xiàn)對種子文件的管理2.2.2 軟件系統(tǒng)實現(xiàn)軟件開發(fā)方法:采用面向?qū)ο蠹夹g(shù)開發(fā)方法開發(fā)語言:c+開發(fā)集成環(huán)境:qt creator使用c+作為開發(fā)語言,qt作為ide,對bittorrent下載過程進(jìn)行抽象出具體的類。比如任務(wù),種子,tracker等等。3 需求分析3.1 種子文件解析功能分析3.2 tracker服務(wù)器功能分析tracker服務(wù)器是bt下載中必須的角色。一個bt c

41、lient 在下載開始以及下載進(jìn)行的過程中,要不停的與 tracker 服務(wù)器進(jìn)行通信,以報告自己的信息,并獲取其它下載client的信息。這種通信是通過 http 協(xié)議進(jìn)行的,又被稱為 tracker http 協(xié)議,它的過程是這樣的: client 向 tracker 發(fā)一個http 的get請求,并把它自己的信息放在get的參數(shù)中;這個請求的大致意思是:我是xxx,我想下載yyy文件,我的ip是aaa,我用的端口是bbb。 tracker 對所有下載者的信息進(jìn)行維護(hù),當(dāng)它收到一個請求后,首先把對方的信息記錄下來(如果已經(jīng)記錄在案,那么就檢查是否需要更新),然后將一部分(并非全部,根據(jù)設(shè)置

42、的參數(shù)已經(jīng)下載者的請求)參與下載同一個文件(一個tracker服務(wù)器可能同時維護(hù)多個文件的下載)的下載者的信息返回給對方。 client在收到tracker的響應(yīng)后,就能獲取其它下載者的信息,那么它就可以根據(jù)這些信息,與其它下載者建立連接,從它們那里下載文件片斷。3.3 torrent服務(wù)器功能分析torrent服務(wù)器是也是bt下載中必須的角色。torrent服務(wù)器也就一個peer服務(wù)器,當(dāng)peer服務(wù)器從tracker服務(wù)器拿到peer列表名單的時候,開始和其他peer服務(wù)器創(chuàng)建連接,并且不斷和彼此進(jìn)行通信和交換。它的過程是這樣的: torrent服務(wù)器向另一個torrent服務(wù)器發(fā)送消息,

43、這個消息的大致意思是:我是xxx,我已經(jīng)下載過yyy文件或片段,你可以從我這里直接下載。然后另一個torrent服務(wù)器也向發(fā)送消息,大致意思是:我這里也有下載一些片段,你看看哪些片段你沒下載過,你可以下載。3.4 軟件需求分析通過可行性研究報告通過不同的角度判斷軟件的開發(fā)可行性,在確定軟件開發(fā)可行的情況下,我們需要對軟件需要實現(xiàn)的各個功能進(jìn)行詳細(xì)分析。對于軟件開發(fā)周期中,需求分析階段是一個很重要的階段,因為連需求不明確,怎么才能開發(fā)出符合客戶需求的軟件,在這一階段做得好,將為整個軟件開發(fā)項目的成功打下良好的基礎(chǔ)。我們必須明確我們要做什么。我們要實現(xiàn)這幾個模塊:種子的解析,連接模塊,peer管理

44、,出錯管理,任務(wù)界面管理。4 概要設(shè)計4.1.1 種子解析模塊1 對種子文件進(jìn)行解析,獲得traceker服務(wù)器的地址,待下載文件的文件名和長度,piece長度和各個piece的hash值。2 實現(xiàn)對種子文件中下載多個文件的解析。4.1.2 連接模塊1 連接traceker,根據(jù)http協(xié)議構(gòu)造獲取peer地址的請求,與traceker建立連接,解析traceker的響應(yīng)信息,從而獲取各個peer的ip地址和端口號。4.1.3 peer管理模塊1 對下載下來的數(shù)據(jù)進(jìn)行hash校驗,判斷是否已經(jīng)下載過該piece。2 根據(jù)peer的ip地址和端口號連接peer,從peer處下載數(shù)據(jù)并且將已經(jīng)下載

45、的數(shù)據(jù)上傳給其他用戶。4.1.4 出錯處理模塊1 出錯處理,在軟件使用的過程中可能出現(xiàn)各種意想不到大錯誤,所有要定義整個系統(tǒng)可能出現(xiàn)的錯誤類型,并且對錯誤進(jìn)行相應(yīng)的提示或捕獲處理。4.1.5 窗口界面模塊1 本軟件的窗口包括一個帶有菜單欄,工具欄和狀態(tài)欄的主窗口,主窗口又分為任務(wù)樹和任務(wù)列表兩個視圖。用戶可以通過任務(wù)樹或者任務(wù)表對結(jié)點進(jìn)行添加,刪除等操作,也可以對任務(wù)進(jìn)行分類,實現(xiàn)對資源的管理。 圖4-1 任務(wù)樹圖圖4-2 任務(wù)表圖5 詳細(xì)設(shè)計5.1 系統(tǒng)功能模塊本軟件的模塊大致如下??蛻舳酥饕ǎ悍N子解析,連接管理,片段管理,出錯管理,窗口管理。peer之間peer通信主要是通過track

46、er服務(wù)器來確定和誰通信,而tracker服務(wù)對peer的下載信息進(jìn)行維護(hù)。圖5-1 系統(tǒng)功能圖圖5-2 bittorrent工作原理5.2 qt的信號與槽機(jī)制qt 是一個跨平臺的 c+ gui 應(yīng)用構(gòu)架,它提供了豐富的窗口部件集,具有面向?qū)ο?、易于擴(kuò)展、真正的組件編程等特點,更為引人注目的是目前 linux 上最為流行的 kde 桌面環(huán)境就是建立在 qt 庫的基礎(chǔ)之上。qt 支持下列平臺:ms/windows-95、98、nt 和 2000;unix/x11-linux、sun solaris、hp-ux、digital unix、ibm aix、sgi irix;embedded- 支持

47、framebuffer 的 linux 平臺。伴隨著 kde 的快速發(fā)展和普及,qt 很可能成為 linux 窗口平臺上進(jìn)行軟件開發(fā)時的 gui 首選。信號和槽機(jī)制是 qt 的核心機(jī)制,要精通 qt 編程就必須對信號和槽有所了解。信號和槽是一種高級接口,應(yīng)用于對象之間的通信,它是 qt 的核心特性,也是 qt 區(qū)別于其它工具包的重要地方。信號和槽是 qt 自行定義的一種通信機(jī)制,它獨立于標(biāo)準(zhǔn)的 c/c+ 語言,因此要正確的處理信號和槽,必須借助一個稱為 moc(meta object compiler)的 qt 工具,該工具是一個 c+ 預(yù)處理程序,它為高層次的事件處理自動生成所需要的附加代碼

48、。在我們所熟知的很多 gui 工具包中,窗口小部件 (widget) 都有一個回調(diào)函數(shù)用于響應(yīng)它們能觸發(fā)的每個動作,這個回調(diào)函數(shù)通常是一個指向某個函數(shù)的指針。但是,在 qt 中信號和槽取代了這些凌亂的函數(shù)指針,使得我們編寫這些通信程序更為簡潔明了。 信號和槽能攜帶任意數(shù)量和任意類型的參數(shù),他們是類型完全安全的,不會像回調(diào)函數(shù)那樣產(chǎn)生 core dumps。所有從 qobject 或其子類 ( 例如 qwidget) 派生的類都能夠包含信號和槽。當(dāng)對象改變其狀態(tài)時,信號就由該對象發(fā)射 (emit) 出去,這就是對象所要做的全部事情,它不知道另一端是誰在接收這個信號。這就是真正的信息封裝,它確保對

49、象被當(dāng)作一個真正的軟件組件來使用。槽用于接收信號,但它們是普通的對象成員函數(shù)。一個槽并不知道是否有任何信號與自己相連接。而且,對象并不了解具體的通信機(jī)制。你可以將很多信號與單個的槽進(jìn)行連接,也可以將單個的信號與很多的槽進(jìn)行連接,甚至于將一個信號與另外一個信號相連接也是可能的,這時無論第一個信號什么時候發(fā)射系統(tǒng)都將立刻發(fā)射第二個信號。總之,信號與槽構(gòu)造了一個強(qiáng)大的部件編程機(jī)制。信號與槽的定義槽:用來接收信號,可以被看作是普通成員函數(shù),可以被直接調(diào)用。支持public,protected,private修飾,用來定義可以調(diào)用連接到此槽的范圍。public slots:void testslot(c

50、onst qstring& strseqid); 信號:只需要聲明信號名與參數(shù)列表即可,像是一個只有聲明沒有實現(xiàn)的成員函數(shù)。 signals:void testsignal(const qstring&); qt會在moc的cpp文件中實現(xiàn)它。下面代碼中調(diào)用activate的第三個參數(shù)是類中信號的序列號。void ctestobject: testsignal (const qstring & _t1)void *_a = 0, const_cast(reinterpret_cast(&_t1) ;qmetaobject:activate(this, &staticmetaobject, 0,

51、 _a); 信號槽的連接與觸發(fā)通過調(diào)用connect()函數(shù)建立連接,會把連接信息保存在sender對象中;調(diào)用desconnect()函數(shù)來取消。connect函數(shù)的最后一個參數(shù)來用指定連接類型。static bool connect(const qobject *sender, const qmetamethod &signal,const qobject *receiver, const qmetamethod &method, qt:connectiontype type = qt:autoconnection); 一切就緒,發(fā)射!在sender對象中調(diào)用:emit testsigna

52、l(“test”); # define emit 上面代碼可以看到emit被定義為空,這樣在發(fā)射信號時就相當(dāng)于直接調(diào)用qt為我們moc出來的函數(shù)testsignal(constqstring & _t1)。具體的操作由qmetaobject:activate()來處理:遍歷所有receiver并觸發(fā)它們的slots。針對不同的連接類型,這里的派發(fā)邏輯會有不同。不同的連接類型剖析queuedconnection:向receiver所在線程的消息循環(huán)發(fā)送事件,此事件得到處理時會調(diào)用slot,像win32的:postmessage。blockingqueuedconnection:處理方式和queuedconnection相同,但發(fā)送信號的線程會等待信號處理結(jié)束再繼續(xù),像win32的:sendmessage。directconnection:在當(dāng)前線程直接調(diào)用receiver的slot,

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論