武子英
(太原大學外語師范學院,山西 太原 030012)
基于QT的BitTorrent客戶端下載工具設計與實現(xiàn)
武子英
(太原大學外語師范學院,山西 太原 030012)
BT協(xié)議基于先進的協(xié)議和方法,可極大地提高下載速度。而BT同QT的結合可以極大地發(fā)揮BT的優(yōu)勢和作用。文章首先分析了QT的信號和槽機制,以及BT協(xié)議的關鍵學法和策略,最后就其系統(tǒng)的設計進行了闡述。
BT協(xié)議;QT平臺;信號與槽;torrent文件;Peer To Peer
BT協(xié)議除了作為客戶端下載工具,也應用于在線直播、網(wǎng)絡電視中。但是由于忽視硬件問題,并使用較差的教學舉法,使得BT工作時,硬盤處于高速運轉(zhuǎn)狀態(tài),并且影響其他網(wǎng)絡業(yè)務的開展。文章提出了基于QT的BT客戶端下載工具的設計思想,以有效規(guī)避其副作用。
QT是諾基亞開發(fā)的一個跨平臺的C++圖形用戶界面應用程序框架。QT提供給應用程序開發(fā)者建立藝術級的圖形用戶界面所需的所有功能。QT是完全面向?qū)ο蟮模苋菀讛U展,并且允許真正地組件編程。
信號和槽機制是QT的核心機制。信號和槽是一種高級接口,應用于對象之間的通信,它是QT的核心特性,也是QT區(qū)別于其它工具包的重要地方,信號和槽能攜帶任意數(shù)量和任意類型的參數(shù)。
信號就像一個事件的出發(fā),當某個信號由程序或者用戶點擊而觸發(fā),這個信號就會被它的上一級的類的對象發(fā)射。信號在頭文件中進行聲明,QT規(guī)定用關鍵字signals來指示進入信號的聲明區(qū),只有定義過這個信號的類及其派生類能夠發(fā)射這個信號,只有當所有的槽返回以后發(fā)射函數(shù)才返回。如果存在多個槽與某個信號相關聯(lián),那么,當這個信號被發(fā)射時,這些槽將會一個接一個地執(zhí)行,但是它們執(zhí)行的順序?qū)请S機的、不確定的,我們不能人為地指定哪個先執(zhí)行、哪個后執(zhí)行。
槽是普通的C++成員函數(shù),可以被正常調(diào)用,其特殊性在于很多信號可以與其相關聯(lián),即當與其關聯(lián)的信號被發(fā)射時,這個槽就會被調(diào)用。
策略一:嚴格的優(yōu)先級。一旦向某個peer發(fā)送對某個piece中的slice的請求后,則該piece中的其它slice也從該peer處下載。
策略二:最少優(yōu)先,即某個piece在所有peer中的擁有率最低,則優(yōu)先下載該piece。
策略三:隨機選擇第一個要下載的piece。開始下載時,不能采用最少優(yōu)先策略。
策略四:最后階段模式。在最后階段,客戶端向所有peer發(fā)送對這個piece的某些slice的請求,一旦收到某個peer發(fā)來的slice,則向其他 peer發(fā)送cancel消息,只從當前這個peer處下載。
圖1 系統(tǒng)功能結構圖
BT并不集中分配資源,每個peer有責任盡可能地提高自己的下載速度。peer從它可以連接的peer下載文件,并根據(jù)對方提供的下載速率給予同等的上傳回報。阻塞是一種臨時拒絕上傳的策略,雖然上傳停止了,但是下載仍然繼續(xù)。在解除阻塞時,連接并不需要重新建立。
每個客戶端一直與固定數(shù)量的peer保持疏通(通常是4個),嚴格地根據(jù)當前的下載速度來決定哪些peer應該保持疏通。通過計算最近10秒從每個peer處下載數(shù)據(jù)的速度來計算下載速度。
如果只是簡單地為提供最高下載速率的4個peer提供上載服務,那么就沒有辦法發(fā)現(xiàn)那些空閑的連接是否有更好的下載速度。為了解決這個問題,在任何時候,每個peer都擁有一個稱為“optimistic unchoking(優(yōu)化非阻塞)”peer,這個連接總是保持疏通狀態(tài),而不管它的下載速率是多少。每隔30秒,重新選擇一個peer作為優(yōu)化非阻塞peer。30秒足以讓該peer的上載能力達到最大。
一旦某個peer完成了下載,它不能再通過下載速率(因為下載速率已經(jīng)為0了)來決定為哪些peer提供上載了。目前采用的解決辦法是:優(yōu)先選擇那些從它這里得到更好下載速率的peer,保持與它們疏通。這樣做的理由是盡可能的利用上載帶寬。一旦某個peer完成了下載,那么它也就成為了種子。種子擁有一份完整的文件拷貝,并提供給其它peer下載。為了整個系統(tǒng)的性能,每個peer在完成下載后應該作為種子存在一段時間,作為對整個系統(tǒng)的回報。原始種子,即最初提供文件進行共享、并制作生成了種子文件、并把種子文件發(fā)布到Web服務器的種子,至少應該存在到系統(tǒng)中生成另外一個種子時才能離開,否則當前參與下載的所有peer都不能獲得一份完整的文件拷貝。
基于BT協(xié)議的文件分發(fā)系統(tǒng)由以下幾個實體構成:一個Web服務器;一個種子文件;一個Tracker服務器;一個原始文件提供者;一個網(wǎng)絡瀏覽器;一個或多個下載者。
以(63,57)RS碼為例進行仿真,此時m0=log2(63+1)=6,選取本原多項式為p0(x)=x6+x+1,生成多項式為g0(x)=x6+α59x5+α48x4+α43x3+α55x2+α10x+α21.首先生成1000組碼字,將其轉(zhuǎn)化為二進制比特流形式,并加入誤比特率為ε=0.005的錯誤比特,然后按圖2所示的流程進行識別.對本原多項式p(x)進行遍歷,結果如表2所示.可以看出,當m=6,p(x)=x6+x+1時,所有y1,i值均大于門限T1.因此,選取這一組參數(shù)進行后續(xù)第二次判定.
Web服務器上保存著種子文件,下載者使用網(wǎng)絡瀏覽器從Web服務器上下載種子文件。Tracker服務器保存著當前下載某共享文件的所有下載者的IP和端口。原始文件提供者提供完整的共享文件供其他下載者下載,它也被稱為種子,種子文件就是提供者使用BT客戶端生成的。
BT客戶端下載一個共享文件的過程是:客戶端首先解析種子文件,獲取待下載的共享文件的一些信息,其中包括Tracker服務器的地址。然后客戶端連接Tracker獲取當前下載該文件的所有下載者的IP和端口。之后客戶端根據(jù)IP和端口連接其他下載者,從它們那里下載文件,同時把自己已下載的部分提供給其他下載者下載。
共享文件在邏輯上被劃分為大小相同的塊,稱為piece,每個piece的大小通常為256KB。種子文件中包含有每個piece的hash值。BT協(xié)議規(guī)定使用Sha1算法對每個piece生成20字節(jié)的hash值,作為每個piece的指紋。每當客戶端下載完一個piece時,即對該peice使用Sha1算法計算其hash值,并與種子文件中保存的該peice的hash值進行比較,如果一致即表明下載了一個完整而正確的piece。一旦某個piece被下載,該piece即提供給其他peer下載。
系統(tǒng)主要包括種子解析模塊、出錯處理模塊、Peer管理模塊、連接設置模塊、窗口界面模塊。詳細的模塊結構圖如圖1所示。各個模塊的功能如下。
(1)種子解析:負責解析種子文件,從中獲取Tracker服務器的地址、待下載文件的文件名和長度、piece長度、各個piece的hash值。
(2)連接Tracker:根據(jù)HTTP協(xié)議構造獲取Peer地址的請求,與Tracker建立連接,解析Tracker的回應消息,從而獲取各個peer的IP地址和端口號。
(3)與peer交換數(shù)據(jù):根據(jù)peer的IP地址和端口號連接peer、從peer處下載數(shù)據(jù)并將已下載的數(shù)據(jù)上傳給peer。
種子文件包含了提供共享的文件的一些信息,它以.torrent為后綴名,種子文件也被稱為元信息文件或metafile,它是經(jīng)過B編碼的。種子文件事實上就是一個B編碼的字典。
完成解析種子文件并從中獲取Tracker服務器的URL后,即可開始與Tracker進行交互。與Tracker進行交互主要有兩個目的:一是將自己的下載進度告知給Tracker以便Tracker進行一些相關的統(tǒng)計;二是獲取當前下載同一個共享文件的peer的IP地址和端口號。
本客戶端使用HTTP協(xié)議與Tracker進行通信。Tracker通過HTTPGET方法獲取請求,請求的構成為:Tracker的URL后面跟一個“?”以及參數(shù)和值對。例如:
其中peer id是每個客戶端在下載文件前以隨機的方式生成的20字節(jié)的標識符,用于標識自己,它的長度也是固定不變的;compact是用來指示服務器以何種方式進行返回的;port是用于監(jiān)聽的端口號;uploaded是當前總的上傳量,以字節(jié)為單位,而對應的downloaded為當前總的下載量,以字節(jié)為單位;left指示還剩余多少字節(jié)需要下載,以字節(jié)為單位。
Tracker服務器的返回信息是一個經(jīng)過B編碼的字典,以下是一個Tracker服務器回應的示例:
其中,“......”是一個長度為300的字符串,含有50個peer的IP地址和端口號。IP地址占4字節(jié),端口號占2字節(jié),即一個peer占6字節(jié)。
peer之間的通信協(xié)議又稱為peer wire protocal,即peer連線協(xié)議,它是一個基于TCP協(xié)議的應用層協(xié)議。
為了防止有的peer只下載不上傳,BT協(xié)議建議:客戶端只給那些向它提供最快下載速度的4個peer上傳數(shù)據(jù)。簡單地說就是誰向我提供下載,我就提供數(shù)據(jù)供它下載;誰不提供數(shù)據(jù)給我下載,我的數(shù)據(jù)也不會上傳給它。客戶端每隔一定時間,比如10秒,重新計算從各個peer處下載數(shù)據(jù)的速度,將下載速度最快的4個peer解除阻塞,允許這4個peer從客戶端下載數(shù)據(jù),同時將其他peer阻塞。
最終系統(tǒng)完成的主界面效果圖如圖2所示:
用戶通過網(wǎng)絡,利用搜索引擎搜索種子文件,獲得要下載文件的種子文件之后,交給客戶端軟件進行文件下載。最關鍵的是使用跨平臺的IDE平臺QT,使程序可以適應linux系統(tǒng)環(huán)境,在更加開放的環(huán)境下運行,甚至可以移植到嵌入式的開發(fā)板上試運行,并向移動BT下載的方向發(fā)展,使得BT下載的方式和適用范圍得以擴大。
圖2 系統(tǒng)主界面圖
[1]LEE H,Nam T.P2P honeypot to prevent illegal or harmful contents from spreading in P2P network[A]IEEE ICACT[C].2007:497-501.
[2]趙志偉,卓力,等.面向P2P的視頻流實時傳輸技術的研究與進展[J].測控技術,2008,23(5):1-3.
[3]劉峰,面向P2P流媒體服務的應用層組播技術研究[D].國防科技大學,2006.
[4]Alan Shalloway.設計模式精解[M].北京:機械工業(yè)出版社,2006.123-128.
[5]劉崢嶸,張智超,許振山,等.嵌入式應用開發(fā)詳解[M].北京:機械工業(yè)出版社,2004.89-123.
[6]王展明.BitTorrent原理與算法研究及其性能優(yōu)化[D].南昌:南昌大學,2007.
[7]羅賢全,尚朝軒.定制嵌入式Linux系統(tǒng)的啟動程序[J].微計算機信息,2005,97(21):30-31.
[8]張曉林.嵌入式系統(tǒng)固件揭密[M].北京:電子工業(yè)出版社,2003.120-125.
[9]陳姝,方濱興,周勇林.P2P技術的研究與應用[J].計算機工程與應用,2002,38(13):20-23.
Design and Im p lementation of the BitTorrent Download Client Based on QT
WU Zi-ying
(Foreign Language Normal College of Taiyuan University,Taiyuan Shanxi 030012)
The use of an advanced agreement and algorithms,makes BT the user to experience faster than FTP and HTTP download speed.Coupled with the combination of BT and QT,QT platform makes use of BT in a broader space to play a great role and benefits of BT and adapted to contemporary embedded,the development of things.The paper amalyzed QT signals and slots system,keymetheds and measures of BT protocal and stated teh system design.
BT protocol;QT platform;signals and slots;torrent files;Peer To Peer
TP391
A
1673-2014(2011)05-0061-04
2011—05—15
武子英(1976— ),女,山西原平人,講師,碩士研究生,主要從事中文信息處理研究。
(責任編輯 單麥琴)