前言
从读大学开始,C++就一直陪伴着我。这么多年了,总得留下些痕迹。而我一直钟爱socket编程,看了别人写的代码,再加上自己的摸索,就用C++做了最一个简单的bittorrent客户端。还望各位大神多多赐教。
开发环境
以Ubuntu 14.04.3 i386为操作系统,Eclipse cdt 4.5.1为开发工具,gcc 4.8.4为编译器。另外,还需要安装curl-7.46.0.tar.bz2,测试用的torrent文件是ubuntu-14.04.3-desktop-i386.iso.torrent。
功能介绍
程序目前实现了以下功能: 
 (1)解析种子文件。 
 (2)与各个peer进行数据的上传下载,choke和unchoke算法,轮询tracker,检查与peer的连接状况等等。 
 (3)保存下载的piece到磁盘。 
 (4)保存下载的位图。 
 (5)显示当前下载和上传速度,下载完成进度。 
 该程序没有实现做种和限速下载上传的功能。性能也不是很好,若以后有时间的话,我会继续完善。
程序的逻辑和流程
BT的原理大家可以参考下面的三个 站,我在这里就不介绍了。 
 BT官方 站上的协议解释:http://www.bittorrent.org/protocol.html 
 Bittorrent Protocol Specification:http://wiki.theory.org/BitTorrentSpecification 
 Incentives Build Robustness in BitTorrent:http://www.bittorrent.com/bittorrentecon.pdf 
 程序的流程: 
 (1)解析种子文件。 
 (2)生成peerID。 
 (3)创建同步事件分离器,这里我用的是select,当然也可以用poll或者epoll。 
 (4)创建磁盘缓冲区,用于暂存下载的piece。 
 (5)创建trackermanager,用于管理tracker,因为可能有多个tracker。 
 (6)创建peermanager,用于管理peer。 
 (7)创建peeracceptor,监听端口,作为服务器端,用于接收peer的连接。 
 (8)trackermanager创建tracker,连接tracker服务器,获取peer列表,并添加到peermanager中。 
 (9)peermanager中,本地客户端与各peer进行交互,发送消息,上传下载piece,保存接收到的数据。 
 (10)同步事件分离器不停地select套接字,分发套接字的读写事件和定时器事件到指定的处理器。
程序的结构及类设计
程序的结构如下: 
 
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!