我一直在寫一個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),就像我應該的,並且對等身份證已經形成。
我的猜測是我正在做一些小小的事情愚蠢的錯誤,並會感謝任何幫助發現它是什麼。
它很難猜測哪些代碼將是相關的(而且還有很多隻是發佈)。不過,我會嘗試發佈任何要求的內容。
編輯
我不是十六進制編碼的info_hash,這有點幫助。
這是需要的生成URI,並嘗試對獲取的響應代碼:
//uri is the above
WebRequest req = WebRequest.Create(uri);
WebResponse resp = req.GetResponse();
Stream stream = resp.GetResponseStream();