为什么对端不发送握手消息来响应我发送的握手消息?

Why doesn't peer send handshake message in response to the handshake message I send?

我最近开始在 Python 3 中编写自己的 BitTorrent 客户端。在我遇到以下问题之前,一切都很完美: 当我向其中一个对等方发送格式化的握手消息时,我没有得到任何东西(b'' 当 buff 未解码时),而不是响应握手。这是代码:

handshakemsg = chr(19)+"BitTorrent protocol"+8*chr(0)+
        getinfohash()+"HAHA-0142421214125A-")
s.send(handshakemsg.encode())
print("Connection to peer accepted")
buff = s.recv(len(handshakemsg))
print(buff)

我认为这是发送握手消息的正确方式,但响应看起来不像规范中描述的那样。我想知道为什么会这样,我该如何避免?

http://bittorrent.org/beps/bep_0003.html#peer-protocol

After the fixed headers come eight reserved bytes, which are all zero in all current implementations. If you wish to extend the protocol using these bytes, please coordinate with Bram Cohen to make sure all extensions are done compatibly. Next comes the 20 byte sha1 hash of the bencoded form of the info value from the metainfo file.

你的是 40(十六进制编码)。 Bittorrent 是二进制协议,不是文本。

确保整个握手消息都发送到远程端,所以尝试使用socket.sendall()方法。

变化:

s.send(handshakemsg.encode()) 

至:

s.sendall(handshakemsg.encode())