首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++实现BT下载涉及到哪些知识,该如何处理

2012-02-24 
c++实现BT下载涉及到哪些知识兄弟姐妹们,大家好!我想做个BT下载,不知道要用到哪些方面的知识,请教各位,给

c++实现BT下载涉及到哪些知识
兄弟姐妹们,大家好!
        我想做个BT下载,不知道要用到哪些方面的知识,请教各位,给小弟指点迷津,谢谢啦.

[解决办法]
1、Tracker要完成的工作
2、B编码原理
3、元信息文件格式
4、Tracker接收的参数
5、Tracker返回的信息

1、Tracker要完成的工作
?
Tracker通过HTTP或HTTPS协议与BT客户端交换信息。例如,接收BT客户端定期发出的信息,更新它们的状态。在接收到下载请求时返回一份可用下载链接列表等。后面会详细论述这些信息的格式。另外如果要实现种子发布的功能,就要提供种子文件上传的功能等。

2、B编码原理
?
BT协议的核心是B编码(Bencoding,发音: 'bee encoding ', B-encoding),这是一种基于字符串的“简单,有效,可扩展”的数据编码格式。它是这样实现的:
?
对于字符串数据,编码后的格式为 <长度> : <字符串> 。长度为十进制。例如, 'spam ' 编码后就成了 4:spam ;
?
对于整型数据,编码后的格式为 i <整数> e 。整数为十进制。例如, i3e 表示 3 , i-3e 表示 -3 。对于整数没有大小限制。 i0e 表示 0 ,但是 i-0e 是非法的。同时,数字前不允许有前导0,如 i03e 就是非法的;
?
对于列表,编码后的格式为 l <列表元素> e 。列表元素也是经过B编码的。例如 l4:spam4:eggse 表示 [ 'spam ', 'eggs '] ;
?
对于字典,编码后的格式为 d <键值列表> e 。键值列表中键名和键值交替出现。例如 d3:cow3:moo4:spam4:eggse 表示 { 'cow ': 'moo ', 'spam ': 'eggs '} 。又如 d4:spaml1:a1:bee 表示 { 'spam ': [ 'a ', 'b ']} 。键名必须为字符串,并以原始方式排序(非字典序)。

3、元信息文件格式
?
元信息文件(metainfo file)就是.torrent文件,俗称种子文件。在处理种子文件的上传时,有必要知晓文件的格式。
?
种子文件是个经过B编码的字典,有以下的键:
?
announce
?
??? Tracker的URL地址
?
info
?
??? 这又是一个字典,有以下的键:
?
??? name
?
??????? 默认的文件名或目录名,保存文件的时候用。字符串。
?
??? piece length
?
??????? 文件分块的大小,一般是2的幂。比如2^18 = 256K。BT 3.2以上版本为2^20 = 1M。在BT中文件是分块传输的。
?
??? pieces

??????? 长度为20的倍数的字符串。按照长度20分割以后,每个子串对应相应分块的SHA1哈希编码。
?
??? length
?
??????? 如果这个键名存在,就表示只有单个文件,键值为这个文件的大小。
?
? ? files
?
????????如果键名 length 不存在,则表示有多个文件。这多个文件将被保存到 name 指定的目录中。files 是一个字典的列表,单个字典中有以下的键:
?
??????? length
?
??? ??????? 文件的大小。
???????
??????? path
?
??????????? 一个字符串组成的列表,最后一个字符串表示文件名,而之前的字符串表示子目录名。

4、Tracker接收的参数
?
Tracker通过HTTP协议中的GET命令获得以下这些参数:
?
info_hash
????
??? 对元信息文件中的info键的值进行SHA1哈希的结果。20个字节长。
?
peer_id
?
??? 长度20的字符串。用作下载用户的标识。
?
ip
?
??? 可选。客户端的IP地址或域名。
?
port
???
??? 客户端的端口号。BT的端口号一般为6881~6889。
?
uploaded
?
??? 已上传数。十进制ASCII码表示
?
downloaded
?
??? 已下载数。十进制ASCII码表示
?
left
?
??? 剩余字节数。十进制ASCII表示。注意不能由已下载数来计算剩余字节数,因为续传和完整性检查都可能需要重复下载一些数据。
?
event
?
??? 可选。值为started,completed,stopped。分别表示下载开始,完成和中断。

5、Tracker返回的信息
?
Tracker返回的信息是经过B编码的字典。根据查询的结果,返回值有两种情况:
?
查询失败的情况
?
failure reason
?
??? 对于失败原因的描述。这是字典里唯一需要的条目。

查询成功的情况
?
interval
?
??? 客户端发出查询请求的间隔时间。
?
peers
?
??? 为一字典组成的列表。单个字典中有以下的键:
?
??? peer id
??
??????? 客户端标识
?
??? ip
?
????????客户端IP或域名
?
??? port
?
????????端口号

热点排行