欢迎来到天天文库
浏览记录
ID:36964688
大小:30.00 KB
页数:3页
时间:2019-05-16
《原创基于bt协议的libtorrent研究与应用开发分析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、摘要:首先介绍了BT元信息文件及BT库libtorrent的数据交互过程,然后对libtorrent的部分重要数据结构进行了分析与说明,提出了业务插件扩展的使用方法。中国论文网 关键词:BT协议;libtorrent应用;BT插件 中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)07-1526-03 AnalysisofLibtorrent’sApplicationBasedonBTProtocol YANGQing,ZHOUDong-mei,WANGYi-fei (CollegeofSciencean
2、dTechnology,ChengduUniversityofTechnology,Chengdu610059,China) Abstract:Firstly,introducedthebtelementinformationfileandbt-libtorrent’sinteractiveprocess.Secondly,analyzedsomeimportantdatastructureoflibtorrent.Lastly,putforwardthemethodofusingplug-inextensionofbusiness.
3、Keywords:BTprotocol;libtorrentApp;BTplug-in 在现今网络通信中,BT作为p2p技术的一种已得到广泛应用。在开源的BT协议库中,LibTorrent是C++语言BitTorrent开发库,旨在提供高性能和良好代码风格的BT开发包。该开发包与其他包不同的是,它直接通过网络堆栈抓取文件页,其性能是官方客户端的数倍,尤其在基于服务器的bt服务器端开发中颇为重要。 1BT元信息文件 元信息文件(MetainfoFileStructure)又称为种子文件(.torrent),其结构元信息文件里面的所有数据
4、都是一个以B编码的dictionary,包含下面列出的重要的键(key): 1)info键对应的值为一字典(dictonary),描述要发布的文件信息,分单文件模式和多文件模式,其中共有键piecelength的键值为每片(piece)的字节数(通常情况下2的n次方),共有键pieces的键值是所有片(piece)哈希值字符串,如piece0:hash0piece1:hash1。 2)announce的键值为tracher服务器的URL地址。 2libtorrent数据交互 在peer的交互中,客户端首先向Tracker请求下载,同
5、时包括本地资源的发布,服务器端Tracker响应则包含客户端请求的资源列表。 2.1Peer客户端的TRACKER请求报文(announce) TRACKER请求报文(announce)的重要参数主要有:表示为元信息文件中的info键值(20字节哈希值)、表示为客户端唯一ID的Peer_id、监听端口、客户端uploaded情况、客户端download情况和客户端IP地址。 2.2Tracker响应报文(text/plain) 响应文本由B编码的字典(dictionary)组成,其中failurereason的键值表示可读的错误信息
6、。Complete为完成整个文件下载的peer数以及peers键值为一个字典列表(peer的id、ip、port)。 2.3Peer与Peer的交互过程 Peer与Peer的交互需要经过握手,piece信息的发布以及piece的请求等过程,如图1所示。 值得注意的是on_bitfield必须在handshake后立即发送,如peer无任何已下载了的piece也可以不发送bitfield。但在peer间通讯的其他时候不再允许发送此消息。 3Libtorrent库解析 libtorrent库的接口由少量几个类组成。最主要的类有sess
7、ion、entry、torrent_info、torrent_handle、alert、extensions。其内部工作流程为如图2所示。冒险岛私服www.yourmyhe.comoiu 图1Peer与Peer的交互过程示意图 图2libtorrent内部工作流程 3.1重要的数据结构 3.1.1entry类 在编码体系结构中,代表一个节点时可使用entry类。它可以是某个变量类型:链表(list)、字典(dictionary)、整数(integer)或者字符串(string等其中成员函数integer()、string(
8、)、list()、dict()函数是返回相应类型的生产者。find_key()将在字典里查找指定关键字的元素,如从torrent信息文件中获得信息的常用代码: dictiona
此文档下载收益归作者所有