2016-12-06 63 views
1

我在bit torrent協議上遇到了一些麻煩。我正在向一些同行發送握手消息。我有我的客戶基本連接到列表中的每個同行,然後發送'握手'。代碼如下 -從bittorrent同級握手中收不到任何數據

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 = (pstrlen + pstr + reserved + new.torrent_hash() + peer_id) 

基於比特激流規範我的消息是49 + LEN(PSTR)適當LEN -

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 

的整個消息看起來像這樣 -

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

輸出錯誤,錯過了'BitTorrent協議'。
正確的握手字符串長度爲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

好吧,我有一個是一個錯字我相信。如果消息是正確的,那麼我可以開始尋找爲什麼我沒有收到來自對等方的任何握手。這可能是因爲我不理解asyncore? –

+1

很難說不看代碼。也許嘗試使用WireShark並與工作客戶端進行比較。 – Encombe