C语言编写BitTorrent客户端(WINDOWS) linux c编程实战
这个代码在http://www.j286.com/有更新详情访问。
由于一些原因,想开发一个类似BT协议的客户端,既要考虑移植性又要考虑效率。
拜读了清华大学董永清写的 linux c编程实战 以及Bram Cohen的一些材料,基本上对BitTorrent的工作原理有了了解,linux c编程实战里面有一些现成代码,于是我就打算拿他下手了。
在书上作者说能够在linux中正常上载下载,不过我遇到了不少问题貌似。由于书上是LINUX代码,我用半天时间修改了能在WINDOWS至少能跑起来,不过遇到以下几个问题。
-info_hash计算错误,导致在服务器上找不到资源
这个我没测试是我的错误还是自身问题,在跟换SHA1代码后正常。
-解析文件大小错误,导致left=可能偏大,导致PT数据为负值。
应该为每个length相加,不修正也不碍事,如果时间允许打算直接重写
-解析种子不支持带文件夹的文件
这个我已经修正
-解析效率低,在info_hash和其他键值对可以同时处理
如果时间允许打算直接重写
-无法创建带文件夹路径
这个我已经修正
-解析文件/文件路径没有将UFT-8转码
这个我已经修正
-种子包含passkey参数不能正确提交
如果不是PT没这个问题,而且很好修改
-文件不能大于2GB
这个我已经修正
-对一些格式的服务器返回不能正确处理
这个我添加一部分代码,还没开始做
-一些算法标志错误
这个已经修正,原先代码注释掉了
-请求pices数没做控制,导致缓存内不完整的数量越来越多,而且无法存放到硬盘
这个是应该是做的时候欠缺考虑,明天再看看
-写入文件不对
可能是上面那个问题导致的,下载大于缓存容量的应该没事,或者更本没下完当做下完,这个还没分析。
现况是,占用CPU有点高,因为放在无线循环主线程里面。能和TRAKCER通讯,能连上PEERS,能下载数据,不能上载读入到缓存必死(应该是移至问题),能完成下载,不过会由于请求问题会导致缓存被强制清空,重下多次数据,而且下载数据有误。作为了解BT协议的话足够了。
https://files.cnblogs.com/dsblab/Test.rar