私はBitTorrentクライアントを作成する際に少し空き時間を投げかけてきましたが、主に好奇心を払っていましたが、C#のスキルを向上させたいという願いからでした。BitTorrentトラッカー発表の問題
the theory wikiをガイドとして使用しています。 BEncodingを処理するためのクラスのライブラリを構築しました。これはかなり自信があります。基本的には、正当性チェックは、解析後直ちに元の.torrentファイルを自分の内部表現から再生成し、ハッシュして比較することです。
次の段階は、トラッカーが動作することをアナウンスすることです。ここでは、トラブラが非常に有用なエラーメッセージなしで私の要求を拒否するので、私はつまずくブロックを打つ。
たとえば、latest stack overflow database dumpとします。私のコードは、以下の発表URIを生成します。
http://208.106.250.207:8192/announce?info_hash=-%CA8%C1%C9rDb%ADL%ED%B4%2A%15i%80Z%B8%F%C&peer_id=&port=6881&uploaded=0&downloaded=0&left=0&compact=0&no_peer_id=0&event=started
私のコードにトラッカーの応答:
d14:failure reason32:invalid info hash and/or peer ideその文字列にトラッカーの応答がChromeのアドレスバーにドロップ
:
d8:completei2e11:external ip13:168.7.249.11110:incompletei0e8:intervali600e5:peerslee
peer_id (有効な)ごみですが、それを賢明なもの(広く使用されているクライアントのなりすまし)に変更しても何も変わりません。
私が言ったように、私は情報の辞書を適切に引き出し、私がしなければならないようにハッシュ(SHA1)しており、ピアIDがうまく形成されていると確信しています。
私の推測では、私はちょっとばかげたばかげたことをやっているのですが、それが正確であることを発見する助けに感謝します。
どのようなコードが適切であるかを推測するのは難しいです(しかも投稿するのはずっとあります)。しかし、私は何かを求めて投稿しようとします。
EDIT
は、私は一種の助けinfo_hashをコードする六角ませんでした。
これは、URIを生成し、応答を取得するのを試みる取るコードです:あなたは正確に
//uri is the above
WebRequest req = WebRequest.Create(uri);
WebResponse resp = req.GetResponse();
Stream stream = resp.GetResponseStream();