从tracker上获取peer列表[通俗易懂]

从tracker上获取peer列表[通俗易懂] 从torrent文件中得到了tracker列表后,接下来的工作就是获取peer列表.tracker使用http协议.客户端向服务器发送标准的GET请求,就可以得到这个列表.tracker返回的信息是bencode编码.向tracker发送的GET请求有如下一些参数:info_hash(必须):    torrent文件中info字段的sha1.torrent文件解析器中已经计算此值,保存在CTo

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
 从torrent文件中得到了tracker列表后,接下来的工作就是获取peer列表.

tracker使用http协议.客户端向服务器发送标准的GET请求,就可以得到这个列表.tracker返回的信息是bencode编码.

向tracker发送的GET请求有如下一些参数:

info_hash(必须):

    torrent文件中info字段的sha1.
torrent文件解析器中已经计算此值,保存在CTorrentParser的m_Infohash成员中.

peer_id(必须):

    节点ID,长20字节.通常每一个下载产生一个相应的ID.通过peer_id可以识别大多数客户端类型.

ip(可选):

    客户端指定的期望其他节点与本地交互时连接的IP.一般来说不用指定此参数,除非客户端使用了代理或者端口映射.

port(可选):

    本地侦听的端口.

uploaded:

    已经上传的字节数.

download:

    已经下载的字节数.

left:

    未下载的字节数.

event(可选):

    此参数可以是如下的值:

        started:下载开始

        completed:下载完毕

        stopped:下载停止

compact(可选):

    此参数值为1,表示期望得到紧凑模式的节点列表.

    否则表示期望得到普通模式的节点列表.    

no_peer_id(可选):

        其值为1,表示不需要节点id信息.

通常tracker会返回错误代码200.

如果返回的bencode编码中包含failure reason字段,则表示处理请求失败,此字段的值即为失败原因.

如果请求成功,则有两个字段是必须出现的:

    peers:节点列表

    interval:服务器期望的下次查询间隔时间,单位为秒

通常还会有如下一些字段出现:

    done peers:下载完毕的节点个数

    num peers或者incomplete: 当前下载的节点个数

普通模式的回复其peers字段包括ip,port两个字段,如果未指定no_peer_id参数还将包括peer id字段.

下面是普通模式的回复例子:

        d8:intervali3600e5:peersld2:ip13:192.168.24.527:peer id20:{peer_id}4:porti2001eed2:ip11:192.168.0.37:peer id20:{peer_id}4:porti6889eeee

        d8:intervali3600e5:peersld2:ip13:192.168.24.524:porti2001eed2:ip11:192.168.0.34:porti6889eeee

紧凑模式的回复其peers字段是一个如下结构的数组:

         struct PEER

        {

             DWORD  IP;//节点IP

             WORD  Port;//节点端口

        }; 

        例如:192.168.24.52:2001 => 0xC0 0xA8 0x18 0x34 0xD1 0x07

下面是紧凑模式的回复例子:

         d8:intervali3600e5:peers12:{12 characters of binary data}e


逸搜(EaseSo)论坛有一个从tracker获取peer列表的
测试程序BTTrackerTest

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189162.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 6种不同画法画平行线_平行线的画法「建议收藏」

    6种不同画法画平行线_平行线的画法「建议收藏」课题平行线的画法主备人复备人教学目标1.掌握平行线的画法,并能用画平行线的方法检验两条直线是否互相平行。2.能运用画平行线的方法画长方形和正方形。3.通过动手画一画,知道两条平行线间的垂线的特点。教学重难点正确运用直尺和三角尺画平行线教学设计复备师:我们上一节课学习了画垂线,这节课我们来学习画平行线。你们觉得该用什么工具画呢?学生可能会说:生1:用尺子来画。生2:用格子来画。师:同学们都能利用手中…

    2022年9月20日
    1
  • SP网站建立后.有两处地方需要首先修改

    SP网站建立后.有两处地方需要首先修改1.SP管理中心—-系统设置—-配置备用访问映射内部URL区域区域的公用URL http://kms:504 默认http://kms:504 http://localhost:504 Intranethttp://localhost:504 http://192.168.1.109:504 Internethttp://192.168.1.109:5

    2022年6月17日
    31
  • 助臂_有所臂助

    助臂_有所臂助第十章助臂  一个好汉三个帮,程序员同样如此。  我怀着异样的心情去了天龙。也许是ANGEL的出现感染了我,给我感觉到了压迫,我比往常更努力的投入到工作中去,我必须尽快完成眼前这个工程,然后全心投入到智能杀毒软件的研究中去。  思考再三后,我还是把DENNIS信里的内容告诉了李珏和赵思聪,他两当场就被震住了。  “真的可能写出智能化的病毒吗?”赵思聪不可思议的问道。  我点了点头,无奈的说道:

    2022年8月31日
    6
  • eclipse从svn下载项目_eclipse配置

    eclipse从svn下载项目_eclipse配置第一步:从svn导出,导出时导出为Java项目第二步:将Java项目转换为maven项目第三步:删除eclipse中刚刚新建的Java项目(不要删除本地源码)第四步:新建maven项目,选择刚刚转换的maven项目第五步:maven项目已经成功转换了,查看该项目的jdk以及库

    2022年10月9日
    5
  • 通过@MapperScan源码了解Spring自定义注解扫描器[通俗易懂]

    通过@MapperScan源码了解Spring自定义注解扫描器[通俗易懂]我们在使用springboot整合MyBatis时,需要在启动类上添加上@MapperScan注解,并写入mapper接口的包路径,然后我们就能通过从springIOC容器中取对应的mapper的Bean来进行持久化操作了,那么@MapperScan是如何将mapper接口实例化并注入到SpringIOC容器中的呢?首先搭建一个springboot项目,引入mybatis和mysql的相…

    2022年5月22日
    128
  • JAVA乐观锁_spring的线程池配置

    JAVA乐观锁_spring的线程池配置首先介绍一些乐观锁与悲观锁:悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很

    2022年8月2日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号