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

时间:2016-02-02 13:33:20

标签: python-3.x bittorrent python-3.5 handshake

我最近开始在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)

我认为这是发送握手消息的正确方法,但响应看起来与规范中描述的不同。我想知道为什么会这样,我怎么能避免这种情况?

2 个答案:

答案 0 :(得分:0)

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

  

在固定标头之后有八个保留字节,在所有当前实现中都是零。如果您希望使用这些字节扩展协议,请与Bram Cohen协调以确保所有扩展都兼容。   接下来是元信息文件中信息值的bencoded格式的 20字节 sha1哈希

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

答案 1 :(得分:-1)

确保将整个握手消息发送给远程对等方,因此请尝试使用socket.sendall()方法。

变化:

s.send(handshakemsg.encode()) 

为:

s.sendall(handshakemsg.encode())