原创基于BT协议的libtorrent研究与应用开发分析.doc_第1页
原创基于BT协议的libtorrent研究与应用开发分析.doc_第2页
原创基于BT协议的libtorrent研究与应用开发分析.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要:首先介绍了BT元信息文件及BT库libtorrent的数据交互过程,然后对libtorrent的部分重要数据结构进行了分析与说明,提出了业务插件扩展的使用方法。 中国论文网 关键词:BT协议;libtorrent应用;BT插件 中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)07-1526-03 Analysis of Libtorrent s Application Based on BT Protocol YANG Qing, ZHOU Dong- mei ,WANG Yi-fei (College of Science and Technology, Chengdu University of Technology, Chengdu 610059, China) Abstract: Firstly,introduced the bt element information file and bt-libtorrents interactive process.Secondly,analyzed some important data structure of libtorrent. Lastly,put forward the method of using plug-in extension of business. Key words: BT protocol; libtorrent App; BT plug-in 在现今网络通信中,BT作为p2p技术的一种已得到广泛应用。在开源的BT协议库中,LibTorrent是C+语言BitTorrent开发库,旨在提供高性能和良好代码风格的BT开发包。该开发包与其他包不同的是,它直接通过网络堆栈抓取文件页,其性能是官方客户端的数倍,尤其在基于服务器的bt服务器端开发中颇为重要。 1 BT元信息文件 元信息文件(Metainfo File Structure)又称为种子文件(.torrent),其结构元信息文件里面的所有数据都是一个以B编码的dictionary,包含下面列出的重要的键(key): 1) info键对应的值为一字典(dictonary),描述要发布的文件信息,分单文件模式和多文件模式,其中共有键piece length的键值为每片(piece)的字节数(通常情况下2的n次方),共有键pieces的键值是所有片(piece)哈希值字符串,如piece0:hash0 piece1:hash1。 2) announce的键值为tracher服务器的URL地址。 2 libtorrent数据交互 在peer的交互中,客户端首先向Tracker请求下载,同时包括本地资源的发布,服务器端Tracker响应则包含客户端请求的资源列表。 2.1 Peer客户端的TRACKER请求报文(announce) TRACKER请求报文(announce)的重要参数主要有:表示为元信息文件中的info键值(20字节哈希值)、表示为客户端唯一ID的Peer_id、监听端口、客户端uploaded情况、客户端download情况和客户端IP地址。 2.2 Tracker响应报文(text/plain) 响应文本由B编码的字典(dictionary)组成,其中failure reason的键值表示可读的错误信息。Complete为完成整个文件下载的peer数以及peers键值为一个字典列表(peer的id、ip、port)。 2.3 Peer与Peer的交互过程 Peer与Peer的交互需要经过握手,piece信息的发布以及piece的请求等过程,如图1所示。 值得注意的是on_bitfield必须在handshake后立即发送,如peer无任何已下载了的piece也可以不发送bitfield。但在peer间通讯的其他时候不再允许发送此消息。 3 Libtorrent库解析 libtorrent库的接口由少量几个类组成。最主要的类有session、entry、torrent_info、torrent_handle、alert、extensions。其内部工作流程为如图2所示。 图1 Peer与Peer的交互过程示意图 图2 libtorrent内部工作流程 3.1重要的数据结构 3.1.1 entry类 在编码体系结构中,代表一个节点时可使用entry类。它可以是某个变量类型:链表(list)、字典(dictionary)、整数(integer)或者字符串(string等其中成员函数integer()、string()、list()、dict()函数是返回相应类型的生产者。find_key()将在字典里查找指定关键字的元素,如从torrent信息文件中获得信息的常用代码: dictionary_typeconst& dict = torrent_file.dict(); dictionary_type:const_iterator i=dict.find(announce); if(i != dict.end() std:string tracker_url = i-second.string(); std:cout (pAlert) . torrent_handle h = pfinished -handle;h.save_resmue_data(); if(save_resume_data_alert*pResume= alert_cast(pAlert) torrent_handle h = p-handle; . std:cout(torrent*, void*) ext)函数的参数是个函数对象,且其参数是一任务指针,应用时通过add_extension()函数来添加扩展插件,如create_ut_metadata_plugin能够提供元数据(metadata)以及peer交互扩展。插件接口由两部分组成:torrent_plugin类和peer_plugin类,例如要设计一个特殊功能的插件special_function_plugin流程如下: struct special_function_plugin: torrent_plugin 重载相关成员函数(如on_files_checked(),on_piece_pass(),on_piece_failed()等; struct special_function_peer_plugin: peer_plugin 重载相关成员函数(如on_handshake(),on_extension_handshake(),on_bitfield(),on_piece(),on_suggest()等; boost:shared_ptr special_function_plugin:new_connection(peer_connection* pc) bt_peer_connection *c =dynamic_cast(pc); if(!c) return boost:shared_ptr(); return boost:shared_ptr(new special_function_peer_plugin(m_torrent,*c, *this); 4结束语 分析了bt协议的交互过程及交互中涉及的重要参数。同时对libtorrent的部分重要数据结构进行了简要分析与说明,并给出了libtorrent的内部工作流程。对于重要的数据结构的使用提供部分伪代码,提出了插件扩展的使用方法,为快速的理解、使用libtorrent进行开发提供了参考。 参考文献: 1 lib

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论