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

posted @ 2012-01-24 01:37  大烧饼的实验室  阅读(596)  评论(0编辑  收藏  举报