一个简单的BitTorrent客户端实现(一):概述

前言

从读大学开始,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进行处理,非常感谢!

上一篇 2016年1月19日
下一篇 2016年1月19日

相关推荐