对等方未发送回取消消息

时间:2018-11-29 03:38:23

标签: python networking struct p2p bittorrent

我正在创建一个Bittorrent客户端,并试图与同龄人交流,我需要取消同等才能最终收到作品。

我一直在向同龄人发送取消冻结和感兴趣的消息,我希望他们将我的取消冻结消息发送回去,但没有成功收到

我主要遵循此article,它表示您必须在创建握手(我已经成功完成)之后发送感兴趣的消息

这是我用来创建感兴趣的消息的代码

 12 def generateinterested():
 13   return struct.pack('>iB', 1, 2)

作为十六进制转储,是:

00000000: 00 00 00 01 02                                    .....

发送该消息不会得到答复。类似的question表示您在握手后(而非感兴趣的)发送了一条与原始文章冲突的取消消息。

我已尝试使用以下代码创建解锁消息

  9 def generateunchoke():
 10   return struct.pack('>iB', 1, 1)

作为十六进制转储,是:

00000000: 00 00 00 01 01                                    .....

两个都没有产生对等体发送回取消消息的结果,正如我所期望的那样。我在这里做错了什么?我是要在握手后发送我感兴趣的消息或取消阻止的消息以获取取消阻止的消息吗?

我收到不一致的消息。 2%的时间,对等方将发回一次取消锁定。其他98%的人等待一分钟以上,没有得到任何答复。为什么是这样?

如果您不熟悉Bittorrent消息here会有所帮助

1 个答案:

答案 0 :(得分:1)

发送感兴趣的消息并不能保证您收到取消锁定的消息。 表示有兴趣只是意味着一个同龄人会认为您是一个坚定的候选人。换句话说,您必须等待。多长时间取决于远程对等方的决策。

签名利息不是期望响应的一种请求形式。它仅向与您连接的所有对等方通告当前状态。其中一些可能会选择在将来某个时候解除您的锁定,另一些则可能不会,并且解除锁定会随着时间而改变。当您将数据上传到他们时,他们更有可能使您窒息。请参阅bittorrent economics paper,以获取有关预期客户如何总体表现的基准。

fast extension在启动过程中提供了更多提示行为。对等体通常遵循一种通用算法来计算一组允许下载的片段,然后告诉您他们计算出的是哪一组,然后您可以请求这些片段而不会被取消选择。