基本上我会收到像 Choke、Unchoke、Have 和 Bitfield 这样的消息,但我没有收到任何 PIECE 消息,为什么会这样?
我也看到了一些未回答的老问题,但没有帮助。BitTorrent 协议实现:未收到“Piece”消息
基本上我会收到像 Choke、Unchoke、Have 和 Bitfield 这样的消息,但我没有收到任何 PIECE 消息,为什么会这样?
我也看到了一些未回答的老问题,但没有帮助。BitTorrent 协议实现:未收到“Piece”消息
有几个原因。最有可能的:
这一切都来自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 计数与播种机计数的比例较小。这应该使调试更容易,因为对等点更有可能取消我们。