我最近开始在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)
我认为这是发送握手消息的正确方法,但响应看起来与规范中描述的不同。我想知道为什么会这样,我怎么能避免这种情况?
答案 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())