时间:2024-06-19
武子英
(太原大学外语师范学院,山西 太原 030012)
基于QT的BitTorrent客户端下载工具设计与实现
武子英
(太原大学外语师范学院,山西 太原 030012)
BT协议基于先进的协议和方法,可极大地提高下载速度。而BT同QT的结合可以极大地发挥BT的优势和作用。文章首先分析了QT的信号和槽机制,以及BT协议的关键学法和策略,最后就其系统的设计进行了阐述。
BT协议;QT平台;信号与槽;torrent文件;Peer To Peer
BT协议除了作为客户端下载工具,也应用于在线直播、网络电视中。但是由于忽视硬件问题,并使用较差的教学举法,使得BT工作时,硬盘处于高速运转状态,并且影响其他网络业务的开展。文章提出了基于QT的BT客户端下载工具的设计思想,以有效规避其副作用。
QT是诺基亚开发的一个跨平台的C++图形用户界面应用程序框架。QT提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。QT是完全面向对象的,很容易扩展,并且允许真正地组件编程。
信号和槽机制是QT的核心机制。信号和槽是一种高级接口,应用于对象之间的通信,它是QT的核心特性,也是QT区别于其它工具包的重要地方,信号和槽能携带任意数量和任意类型的参数。
信号就像一个事件的出发,当某个信号由程序或者用户点击而触发,这个信号就会被它的上一级的类的对象发射。信号在头文件中进行声明,QT规定用关键字signals来指示进入信号的声明区,只有定义过这个信号的类及其派生类能够发射这个信号,只有当所有的槽返回以后发射函数才返回。如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地执行,但是它们执行的顺序将会是随机的、不确定的,我们不能人为地指定哪个先执行、哪个后执行。
槽是普通的C++成员函数,可以被正常调用,其特殊性在于很多信号可以与其相关联,即当与其关联的信号被发射时,这个槽就会被调用。
策略一:严格的优先级。一旦向某个peer发送对某个piece中的slice的请求后,则该piece中的其它slice也从该peer处下载。
策略二:最少优先,即某个piece在所有peer中的拥有率最低,则优先下载该piece。
策略三:随机选择第一个要下载的piece。开始下载时,不能采用最少优先策略。
策略四:最后阶段模式。在最后阶段,客户端向所有peer发送对这个piece的某些slice的请求,一旦收到某个peer发来的slice,则向其他 peer发送cancel消息,只从当前这个peer处下载。
图1 系统功能结构图
BT并不集中分配资源,每个peer有责任尽可能地提高自己的下载速度。peer从它可以连接的peer下载文件,并根据对方提供的下载速率给予同等的上传回报。阻塞是一种临时拒绝上传的策略,虽然上传停止了,但是下载仍然继续。在解除阻塞时,连接并不需要重新建立。
每个客户端一直与固定数量的peer保持疏通(通常是4个),严格地根据当前的下载速度来决定哪些peer应该保持疏通。通过计算最近10秒从每个peer处下载数据的速度来计算下载速度。
如果只是简单地为提供最高下载速率的4个peer提供上载服务,那么就没有办法发现那些空闲的连接是否有更好的下载速度。为了解决这个问题,在任何时候,每个peer都拥有一个称为“optimistic unchoking(优化非阻塞)”peer,这个连接总是保持疏通状态,而不管它的下载速率是多少。每隔30秒,重新选择一个peer作为优化非阻塞peer。30秒足以让该peer的上载能力达到最大。
一旦某个peer完成了下载,它不能再通过下载速率(因为下载速率已经为0了)来决定为哪些peer提供上载了。目前采用的解决办法是:优先选择那些从它这里得到更好下载速率的peer,保持与它们疏通。这样做的理由是尽可能的利用上载带宽。一旦某个peer完成了下载,那么它也就成为了种子。种子拥有一份完整的文件拷贝,并提供给其它peer下载。为了整个系统的性能,每个peer在完成下载后应该作为种子存在一段时间,作为对整个系统的回报。原始种子,即最初提供文件进行共享、并制作生成了种子文件、并把种子文件发布到Web服务器的种子,至少应该存在到系统中生成另外一个种子时才能离开,否则当前参与下载的所有peer都不能获得一份完整的文件拷贝。
基于BT协议的文件分发系统由以下几个实体构成:一个Web服务器;一个种子文件;一个Tracker服务器;一个原始文件提供者;一个网络浏览器;一个或多个下载者。
以(63,57)RS码为例进行仿真,此时m0=log2(63+1)=6,选取本原多项式为p0(x)=x6+x+1,生成多项式为g0(x)=x6+α59x5+α48x4+α43x3+α55x2+α10x+α21.首先生成1000组码字,将其转化为二进制比特流形式,并加入误比特率为ε=0.005的错误比特,然后按图2所示的流程进行识别.对本原多项式p(x)进行遍历,结果如表2所示.可以看出,当m=6,p(x)=x6+x+1时,所有y1,i值均大于门限T1.因此,选取这一组参数进行后续第二次判定.
Web服务器上保存着种子文件,下载者使用网络浏览器从Web服务器上下载种子文件。Tracker服务器保存着当前下载某共享文件的所有下载者的IP和端口。原始文件提供者提供完整的共享文件供其他下载者下载,它也被称为种子,种子文件就是提供者使用BT客户端生成的。
BT客户端下载一个共享文件的过程是:客户端首先解析种子文件,获取待下载的共享文件的一些信息,其中包括Tracker服务器的地址。然后客户端连接Tracker获取当前下载该文件的所有下载者的IP和端口。之后客户端根据IP和端口连接其他下载者,从它们那里下载文件,同时把自己已下载的部分提供给其他下载者下载。
共享文件在逻辑上被划分为大小相同的块,称为piece,每个piece的大小通常为256KB。种子文件中包含有每个piece的hash值。BT协议规定使用Sha1算法对每个piece生成20字节的hash值,作为每个piece的指纹。每当客户端下载完一个piece时,即对该peice使用Sha1算法计算其hash值,并与种子文件中保存的该peice的hash值进行比较,如果一致即表明下载了一个完整而正确的piece。一旦某个piece被下载,该piece即提供给其他peer下载。
系统主要包括种子解析模块、出错处理模块、Peer管理模块、连接设置模块、窗口界面模块。详细的模块结构图如图1所示。各个模块的功能如下。
(1)种子解析:负责解析种子文件,从中获取Tracker服务器的地址、待下载文件的文件名和长度、piece长度、各个piece的hash值。
(2)连接Tracker:根据HTTP协议构造获取Peer地址的请求,与Tracker建立连接,解析Tracker的回应消息,从而获取各个peer的IP地址和端口号。
(3)与peer交换数据:根据peer的IP地址和端口号连接peer、从peer处下载数据并将已下载的数据上传给peer。
种子文件包含了提供共享的文件的一些信息,它以.torrent为后缀名,种子文件也被称为元信息文件或metafile,它是经过B编码的。种子文件事实上就是一个B编码的字典。
完成解析种子文件并从中获取Tracker服务器的URL后,即可开始与Tracker进行交互。与Tracker进行交互主要有两个目的:一是将自己的下载进度告知给Tracker以便Tracker进行一些相关的统计;二是获取当前下载同一个共享文件的peer的IP地址和端口号。
本客户端使用HTTP协议与Tracker进行通信。Tracker通过HTTPGET方法获取请求,请求的构成为:Tracker的URL后面跟一个“?”以及参数和值对。例如:
其中peer id是每个客户端在下载文件前以随机的方式生成的20字节的标识符,用于标识自己,它的长度也是固定不变的;compact是用来指示服务器以何种方式进行返回的;port是用于监听的端口号;uploaded是当前总的上传量,以字节为单位,而对应的downloaded为当前总的下载量,以字节为单位;left指示还剩余多少字节需要下载,以字节为单位。
Tracker服务器的返回信息是一个经过B编码的字典,以下是一个Tracker服务器回应的示例:
其中,“......”是一个长度为300的字符串,含有50个peer的IP地址和端口号。IP地址占4字节,端口号占2字节,即一个peer占6字节。
peer之间的通信协议又称为peer wire protocal,即peer连线协议,它是一个基于TCP协议的应用层协议。
为了防止有的peer只下载不上传,BT协议建议:客户端只给那些向它提供最快下载速度的4个peer上传数据。简单地说就是谁向我提供下载,我就提供数据供它下载;谁不提供数据给我下载,我的数据也不会上传给它。客户端每隔一定时间,比如10秒,重新计算从各个peer处下载数据的速度,将下载速度最快的4个peer解除阻塞,允许这4个peer从客户端下载数据,同时将其他peer阻塞。
最终系统完成的主界面效果图如图2所示:
用户通过网络,利用搜索引擎搜索种子文件,获得要下载文件的种子文件之后,交给客户端软件进行文件下载。最关键的是使用跨平台的IDE平台QT,使程序可以适应linux系统环境,在更加开放的环境下运行,甚至可以移植到嵌入式的开发板上试运行,并向移动BT下载的方向发展,使得BT下载的方式和适用范围得以扩大。
图2 系统主界面图
[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].北京:机械工业出版社,2006.123-128.
[5]刘峥嵘,张智超,许振山,等.嵌入式应用开发详解[M].北京:机械工业出版社,2004.89-123.
[6]王展明.BitTorrent原理与算法研究及其性能优化[D].南昌:南昌大学,2007.
[7]罗贤全,尚朝轩.定制嵌入式Linux系统的启动程序[J].微计算机信息,2005,97(21):30-31.
[8]张晓林.嵌入式系统固件揭密[M].北京:电子工业出版社,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— ),女,山西原平人,讲师,硕士研究生,主要从事中文信息处理研究。
(责任编辑 单麦琴)
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!