我一直在使用像python中的popcorn时间这样的torrent应用程序已经有一段时间了,并且它运行得很好。我曾经遇到过与同行相关的一些问题。
我从DHT,UDP / HTTP Tracker或PeerExchange获得的大约90%的同伴都无法访问.. 我尝试连接,但它只是告诉我它拒绝连接。这是预期的行为吗?我知道同伴可能处于脱机状态,但90%很多。 这意味着我需要100个潜在的同伴,在尝试所有之后可能有10个连接。这并不对应于例如uTorrent,它可能有13个潜在的同伴并连接到其中的10个。
以防你们认为它可能与我的连接方法或解析响应有关; 连接方法:
def connect(self):
try:
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.settimeout(self.con_timeout)
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.socket.connect((self.host, self.port))
return True
except (socket.timeout, ConnectionRefusedError, ConnectionAbortedError, ConnectionResetError, OSError):
return False
Ip / port解析:
def uri_from_bytes(data):
ip = socket.inet_ntop(socket.AF_INET, data[0: 4])
offset, port = read_ushort(data, 4)
return 'tcp://' + ip + ":" + str(port)
def read_ushort(buffer, offset):
ushort = struct.unpack_from('!H', buffer, offset)
offset += 2
return offset, ushort[0]
如果有人有开发torrent客户端的经验,或者只是想知道可能出现什么问题;感谢帮助!