1

基本上我会收到像 Choke、Unchoke、Have 和 Bitfield 这样的消息,但我没有收到任何 PIECE 消息,为什么会这样?

我也看到了一些未回答的老问题,但没有帮助。BitTorrent 协议实现:未收到“Piece”消息

4

1 回答 1

2

有几个原因。最有可能的:

  • 同行应该知道你的状态,所以确保你发送“感兴趣”、“不感兴趣”、“窒息”、“未窒息”消息。同样,您应该跟踪对等状态。
  • 您对同伴或同伴窒息您或两者都不感兴趣。只有当您对同伴感兴趣并且同伴不会让您窒息时,您才能请求一块。否则 peer 应该忽略你的请求。
  • 同行没有您要求的作品。在这种情况下,对等方也应该忽略请求。

这一切都来自bittorrent 规范。这是日志的一部分,演示了获取第一部分所需的步骤:

Openning a new session between peers.
Connected to <peer addr>
Handshaked with BitTorrent protocol uTorrent version 2040
Received message: Bitfield 
Update 'peer have' bitfield.
Received message: Have 572
Mark piece 572 as available.
...
... here we receive many Have messages, I skip them
...
Sending message: Interested
Received message: Unchoke
Sending message: Request { piece index = 0, block offset = 0, block length = 16384 }
Received message: Piece { piece index = 0, block offset = 0, block length = 16384 }
...

如您所见,uTorrent 用 Piece 消息进行了回复。

然而,在这种情况下,我们很幸运:对等点并不总是取消我们,因为它具有有限数量的所谓“取消锁定槽”。所以这里有一个提示:使用 swarm 的 leecher 计数与播种机计数的比例较小。这应该使调试更容易,因为对等点更有可能取消我们。

于 2013-05-11T11:28:41.850 回答