基于BT协议的下载程序开发

时间:2022-05-14 11:36:31

基于BT协议的下载程序开发

摘要:本文分析了BitTorrent协议规范,根据torrent文件格式和Bencoding编码规则,在C#.Net2005环境下实现了对torrent文件的解析。根据分析结果,给出了一种下载程序的实现。

关键词:下载程序;BitTorrent协议;torrent;B-encoding

中图分类号:TP312文献标识码:A文章编号:1009-3044(2007)12-21661-02

Development of Downloading Procedure Based on BT Protocol

ZHOU Ke1, ZHANG Yan-na2

(1.Henan University College of Computer and Information Engineering,Kaifeng 475001,China;2.Henan UniversityHenan University, Department of Facility and Laboratory Mangement,Kaifeng 475001,China)

Abstract:This paper analyses the BitTorrent protocol in details and sums up its characteristics. Then, in the basis of torrent file format and Bencoding encoded mode,The torrent file had been successfully analysed precisely. According the analysis, one method of developing the downloading procedure was described.

Key words:Downloading Procedure;BitTorrent protocol; torrent; Bencoding

1 引言

传统的网络服务模式,所有的下载开销都在服务器上,由于服务器性能和带宽的限制, 服务器往往要限定用户的数量和访问速率;而使用基于BT协议的共享软件,可以把下载的开销分摊到每个下载者那里,在理论上支持无限多个下载者下载同一个文件,充分提高文件共享效率。本文简要分析了BT协议的工作原理,并给出了一种采用C#的下载程序的分析部分的实现,基于这种分析程序,借助C#中TCP协议的助手类就可以快速的开发出实用的下载程序。

2 BT协议的工作原理

BT协议将这种文件共享模式分为Tracker服务器和Client两部分。Tracker服务器的任务是搜集Client的信息,并帮助BT Client相互发现对方,进而能互相下载所需的资源。每一个Client即一个Peer 在下载开始以及下载过程中,要不断地与Tracker服务器进行通信,报告自己的信息并获取其它Peer的信息。Tracker对所有下载者的信息进行维护,当它收到一个请求后,先把发出请求的Peer的信息记录下来,然后将其他参与下载同一个文件的下载者的信息返回给该Peer。Peer在收到Tracker的响应后,与其它下载者建立连接下载本地所没有的文件资源。为了使别的客户端也可以从本地获取文件资源,该客户端还要监听某个端口,用于接收其它Peers的连接请求。

3 torrent文件及其分析程序的实现

BT协议的主要特征,集中体现torrent文件中。下面就torrent文件的内容及格式先做介绍,最后给出用C#语言实现该类文件解析的方法。

3.1 torrent文件及其编码

BT客户端开始下载资源时首先需要寻找torrent文件, torrent文件包含了完整的资源下载信息:包括资源名、大小、资源的创建者,创建时间,指向Tracker的url列表等信息。

torrent文件采用B-encoding编码来保存数据。B-encoding编码提供四种类型的数据表示:strings(字符串)、integers(整数)、lists(列表)、dictionaries(字典) 。编码规则如下:

(1)strings的编码规则为::

字符串长度单位为字节,没有开始或结束标记。

(2)integers的编码规则为:ie

开始标记为i,结束标记为e。没有大小限制,0不能出现在负的或者是整数的最高位。

(3)lists的编码规则为:le

开始标记为l,结束标记为e,列表里可以包含任何B-encoding编码类型,包括字符串、整数、列表、字典。

(4)dictionaries的编码规则为:de

开始标记为d,结束标记为e,关键字必须为B-encoding字符串,值可以为任何B-encoding编码类型,包括字符串、整数、列表、字典。

torrent 文件格式是由若干字段确定的,torrent 文件中关键字段如表1所示:

表1 torrent 文件中关键字段

info字段用于确定资源是由单文件还是多文件构成的,info后面的第一个字符串为length 或files,二者只能出现一个。length表明是单文件结构,files表明是多文件结构,其详细区别如表2所示:

表2 info字段的内容

3.2 torrent 文件分析程序的实现

B-encoding的编码规则只有前述的四种类型的数据,列表和字典中允许包含这四种数据类型,整个文件本身就是字典。在实现的这种文件的分析时采用如下的分析方法,算法流程如图1所示:

(1)字符串分析。调用四个函数来判断字符串是否为B-encoding编码的四种数据类型:字符串分析函数readstring、整数分析函数readint、列表分析函数 readlist和字典分析函数 readdict。

(2)分析结果存放。定义一个基类和四个由该基类派生的子类,四个子类分别对应于四种数据类型。字符串和整数数据分别定义CBEncodeString 和CBEncodeInt类的对象存放结果;列表类型的数据使用C#中的List泛型类定义一个列表:

public List m_listObj= new List()暂存分析列表的结果,m_listObj的数据类型定义成基类以便同时存放四个子类的分析结果;字典分析结果的存放用SortedList泛型类定义一个字典类型:

public SortedList m_mapObj = new SortedList()暂存分析字典的结果;同时,在字典类中,还需要定义一个列表类型m_listObj,因为torrent文件在字典结构中包含有列表,这样的结构有利于数据的读取。而字典类型中的值定义为基类型,以便于兼容四种数据类型,类似的列表也需要定义为基类。

由于分析的结果有多种,而且结构不同,使用list泛型类定义一个基类型的列表类型m_listObj按序返回分析结果,torrent文件本身就是一个字典,所以保存返回值的列表只有索引值为0的一项,该项存储的内容是已经分析好的整个文件,结构为一个字典。还要需将最终分析结果由列表m_listObj[0])中的内容强制转换成字典CBEncodeDict类型,而字典中又有Bencoding编码中的四种数据类型深层嵌套,分析整个文件的结构,要把所有的格式都考虑到,在输出结果的过程中根据具体情况要进行不同类型和不同次数的强制转换。

4 结论

本文对BT工作原理进行了分析,根据B-encoding编码规则和torrent文件的格式,在C#.NET 2005环境下开发出了对torrent 文件进行解析的Windows应用程序。借助于此程序,将分析结果提供给下载程序就可以开发出BT下载软件。当然,在使用BT软件进行文件共享带来方便的同时,对磁盘的频繁操作可能会引起磁盘老化,占用过多带宽,这些问题都需要在开发有关基于BitTorrent协议的共享软件时给予足够的重视。以较小的代价获得较好的网络文件共享功能。

图1 算法流程

参考文献:

[1]Cohen B.Incentives BuildRobustness in BitTorrent[Z/OL]..

[2]王珏,BitTorrent下载技术研究.科技广场,2005(2).

[3]孔彬,徐良贤,BitTorrent原理分析及改进.计算机工程2004.30(12).

[4]Simon Robinson.等.著.李敏波.等.译.C#高级编程(第3版),清华大学出版社,2005年7月.

“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。”

上一篇:遗传算法在公交车辆智能排班系统中的应用研究 下一篇:多寡头库诺特和斯坦克尔伯格竞争模型的博弈分...