我一直在写一个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();