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 + LEN(PSTR)の適切なLENですメッセージ全体がこのように見える -
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)
を持っていて、それはただタイムアウトになりますか?
わかりました。メッセージが正しければ、私はピアから戻ってきたハンドシェークをなぜrecvしていないのかを調べ始めることができます。私はasyncoreを理解していない可能性がありますか? –
コードを見ずに伝えるのは難しいです。 wireSharkを使用して、動作中のクライアントと比較しようとするかもしれません。 – Encombe