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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

10、,對(duì)軟件的系統(tǒng)設(shè)計(jì)進(jìn)行論述。 關(guān)鍵字:bittorrent協(xié)議;信號(hào)與槽機(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 國(guó)內(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ù)語(yǔ)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è)計(jì)要求82.2.2 軟件系統(tǒng)實(shí)現(xiàn)83 需求分析103.1 種子文件解析功能分析103.2 tracker服務(wù)器功能分析103.3 torrent服務(wù)器功能分析103.4 軟件需求分析104 概要設(shè)計(jì)114.1.1 種子解析模塊114.1.2 連接模塊114.1.3 peer管理模塊114.1.4 出錯(cuò)處理模塊114.1.5 窗口界面模塊115 詳細(xì)設(shè)計(jì)135.1 系統(tǒng)功能模塊135.2 qt的信號(hào)與槽機(jī)制145.3 bt的算法與策略195.3.1 阻塞算法195.3.2 超級(jí)種子算法195.3.3 結(jié)束算法205.3.4 防冷落算法205.3.5 最佳無(wú)阻塞算法

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

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

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

19、安全性,提高p2p各個(gè)節(jié)點(diǎn)提供服務(wù)的可靠性等方面都需要做深入的研究。深入研究p2p資源定位技術(shù)有重要的理論和現(xiàn)實(shí)意義。一方面,隨著p2p應(yīng)用的不斷增長(zhǎng),p2p資源定位技術(shù)遇到的一系列問題迫切需要我們對(duì)它進(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的意義對(duì)于大多數(shù)網(wǎng)民是不言而喻的。在平時(shí)的生活或?qū)W習(xí)大多數(shù)下載是下載一些音樂,電影和一些軟件,尤其是電影,現(xiàn)

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

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

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

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

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

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

26、ngs(字符串)編碼為:例如:4:test 表示為字符串test,表示長(zhǎng)度為4個(gè)字節(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 表示為二個(gè)字符串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)如下:全部?jī)?nèi)容必須都為bencoding編碼類型。整個(gè)文件為一個(gè)字典結(jié)構(gòu),包含如下關(guān)鍵字announce:tracker服務(wù)器的url(字符串)announce-list(可選):備用tracker服務(wù)器列表(列表)creation date(可選):種子創(chuàng)建的時(shí)間,unix標(biāo)準(zhǔn)時(shí)間comment(可選):備注(字符串)created by(可選):創(chuàng)建

28、人或創(chuàng)建程序的信息(字符串)info:一個(gè)字典結(jié)構(gòu),包含文件的主要信息,分為單文件結(jié)構(gòu)或多文件結(jié)構(gòu)。單文件結(jié)構(gòu):length:文件長(zhǎng)度,單位字節(jié)(整數(shù))md5sum(可選):長(zhǎng)32個(gè)字符的文件的md5校驗(yàn)(字符串)name:文件名(字符串)piece length:每個(gè)塊的大小,單位字節(jié)(整數(shù))pieces:每個(gè)塊的20個(gè)字節(jié)的sha1 hash的值(二進(jìn)制格式)多文件結(jié)構(gòu)如下:files:一個(gè)字典結(jié)構(gòu)length:文件長(zhǎng)度,單位字節(jié)(整數(shù))md5sum(可選):同單文件結(jié)構(gòu)中相同path:文件的路徑和名字,是一個(gè)列表結(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é)議之上的一個(gè)p2p文件傳輸協(xié)議,處于tcp/ip結(jié)構(gòu)的應(yīng)用層。bittorrent協(xié)議本身也包含了很多具體的內(nèi)容協(xié)議和擴(kuò)展協(xié)議,并在不斷擴(kuò)充中。根據(jù)bittorrent協(xié)議,文件發(fā)布者會(huì)根據(jù)要發(fā)布的文件生成提供一個(gè).torrent文件,即種子文件,也簡(jiǎn)稱為“種子”。torrent文件本質(zhì)上是文本文件,包含tracker信息和文件信

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論