整个系统各个模块功能如下图所示:
- 种子解析:负责解析种子文件,从中获取Tracker服务器的地址,待下载文件的文件名和长度,piece长度,各个piece的hash值。
- 连接Tracker:根据HTTP协议构造获取peer地址的请求,与Tracker建立连接,解析Tracker的回应消息,从而获取各个peer的IP地址和端口号。
- 与peer交换数据:根据peer的IP地址和端口号连接peer,从peer出下载数据并将已下载的数据上传给peer。
- 出错处理:定义整个系统可能出现的错误类型,并进行处理。
- 运行日志:记录程序运行的日志,保存到文件中以备查看和分析。
上述第3项“与peer交换数据”是本系统的核心和主要构成部分,它又可以划分成如下几个子模块:
(1)peer管理:本模块为每个建立TCP连接的Peer构造一个peer结构体,并负责管理peer链表,添加和删除peer节点。
peer结构体的主要成员有:
- peer的IP地址和端口号
- 与该peer进行通信的套接字
- 该peer的ID
- 该peer当前所处状态
- 发送缓冲区
- 接收缓冲区
- 数据请求队列
- 数据被请求队列 <