1
비트 토 런트 프로토콜에 문제가 있습니다. 나는 동료들에게 악수 메시지를 보내는 시점에있다. 내 클라이언트는 기본적으로 목록의 모든 피어에 연결 한 다음 '핸드 셰이크'를 보냅니다. 아래 코드는 -비트 토 런트 피어 핸드 셰이크에서 데이터를받지 못했습니다.
peer_id = 'autobahnbit'
peer_id = peer_id.encode('utf-8')
pstr = 'BitTorrent protocol'
pstr = pstr.encode('utf-8')
pstrlen = chr(19)
pstrlen = pstrlen.encode('utf-8')
reserved = chr(0) * 8
reserved = reserved.encode('utf-8')
내가 보내는 변수가 있습니다. 내 MSG는 -
lenmsg = (pstrlen + reserved + new.torrent_hash() + peer_id)
print(lenmsg)
print(len(lenmsg))
밖으로 넣어 - -
b'\x13\x00\x00\x00\x00\x00\x00\x00\x00\x94z\xb0\x12\xbd\x1b\xf1\x1fO\x1d)\xf8\xfa\x1e\xabs\xa8_\xe7\x93autobahnbit'
49
를 비트 토런트 사양을 바탕으로
이msg = (pstrlen + pstr + reserved + new.torrent_hash() + peer_id)
내 메시지는 49 + 렌 (pstr)의 적절한 렌이다 전체 메시지는 다음과 같습니다. -
b'\x13\x00\x00\x00\x00\x00\x00\x00\x00\x94z\xb0\x12\xbd\x1b\xf1\x1fO\x1d)\xf8\xfa\x1e\xabs\xa8_\xe7\x93autobahnbit'
내 주요 문제는 어떤 데이터를 다시받지 못한다는 것입니다. socket.settimeout(4)
이 있는데 시간 초과가 발생합니까?
좋아 나는 그게 내가 믿는다 오타이었다 있습니다. 메시지가 맞다면 피어로부터 다시 핸드 셰이크를받지 못하는 이유를 조사 할 수 있습니다. 내가 비동기를 이해하지 못하는 것일까? –
코드를 보지 않고 말하기가 어렵습니다. 어쩌면 WireShark를 사용하고 작동하는 클라이언트와 비교해보십시오. – Encombe