5.系统模块设计

1. 种子解析:负责解析种子文件,从中获取Tracker服务器的地址,待下载的文件名和长度,piece长度,各个piece的hash值。
2. 连接Tracker:根据HTTP协议构造获取peer地址的请求,与Tracker建立连接,解析Tracker的回应消息,从而获取各个peer的IP地址和端口号。
3. 与peer交换数据:根据peer的IP地址和端口号连接peer,从peer处下载数据并将已下载的数据上传给peer。
4. 出错处理:定义整个系统可能出现的错误类型,并对错误进行处理。
5. 运行日志:记录程序运行的日志,并保存到文件中以备查看和分析。
与peer交换数据是本系统的核心和主要构成部分,划分为如下几个子模块
1. peer管理:系统为每个已建立TCP连接的peer构造一个peer结构体。本模块负责管理peer链表,添加和删除peer结点。
2. 消息处理:peer与peer之间以发送和接受消息的方式进行通信。本模块负责根据当前的状态生成并发送消息,接受并处理消息。其中对下载和
                        上传数据最重要的是request消息和piece消息。request消息向peer发送数据请求,指明请求的是哪个piece的哪个slice。peer接收
                        到request消息后根据当前的状态,决定是否发送数据给对方。如果允许发送,则构造piece消息,数据被封装在该消息中。每当下载完
                        一个正确的piece时,就像所有peer发送have消息通告已经获得该piece,其他peer如果没有该piece就可以向peer发送数据请求,每次
                        请求都是以slice为单位。
3. 缓冲管理:将下载到的数据先缓冲起来,等到下载到一定量的数据后在集中写入硬盘。peer请求一个slice的数据时,先将该slice所在的整个piece
                        读入到缓冲区中,下载peer在请求该piece的其他slice时,只需在缓冲区获取,避免了频繁读写硬盘。
4. 位图管理:客户端与peer建立了连接并进行握手后,即发送位图给peer告知已下载到哪些piece,同时也接收对方的位图并将其保存在peer结构体。
                         没下载到一个piece就更新自己的位图,并发送have消息给所有已建立连接的peer。每当接收到peer发来的have消息就更新该peer的位图。
5. 策略管理:主要计算各个peer的下载和上传速度,根据下载速度选择并阻塞peer,采用随机算法选择优化非阻塞peer,以及实现片段选择策略。
6. 信号处理:在运行过程中,程序可能接收到一些信号。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值