2016-12-06 2 views
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)이 있는데 시간 초과가 발생합니까?

답변

1

출력이 잘못되어 '비트 토 런트 프로토콜'이 누락됩니다.
적절한 핸드 셰이크 문자열은 68 바이트입니다.

그것은해야한다 :

\x13BitTorrent protocol\x00\x00\x00\x00\x00\x00\x00\x00\x94z\xb0\x12\xbd\x1b\xf1\x1fO\x1d)\xf8\xfa\x1e\xabs\xa8_\xe7\x93autobahnbit 
+0

좋아 나는 그게 내가 믿는다 오타이었다 있습니다. 메시지가 맞다면 피어로부터 다시 핸드 셰이크를받지 못하는 이유를 조사 할 수 있습니다. 내가 비동기를 이해하지 못하는 것일까? –

+1

코드를 보지 않고 말하기가 어렵습니다. 어쩌면 WireShark를 사용하고 작동하는 클라이언트와 비교해보십시오. – Encombe

관련 문제