多线程传输实现
多线程传输实现
实现原理:
将源文件按长度为分为
N
块文件
,
然后开辟
N
个线程
,
每个线程传输一块
,
最后合并所有
线线程文件
.
比如一个文件
500M
我们按长度可以分
5
个线程传输
.
第一线程从
0-100M,
第二
线程从
100M-200M......
最后合并
5
个线程文件
.
实现流程:
1.
客户端向服务端请求文件信息
(
名称
,
长度
)
2.
客户端跟据文件长度开辟
N
个线程连接服务端
3.
服务端开辟新的线程与客户端通信并传输文件
4.
客户端将每线程数据保存到一个文件
5.
合并所有线程文件
断点续传:
所谓的断点续传就是指
:
文件在传输过程式中被中断后
,
在重新传输时
,
可以从上次的断
点处开始传输
,
这样就可
节省时间
,
和其它资源
.
实现关键:
在这里有两个关键点
其一是检测本地已经下载的文件长度和断点值;
其二是在服务端调整文件指针到断点处
实现方法:
我们用一个简单的方法来实现断点续传的功能
.
在传输文件的时候创建一个临时文件用
来存放文件的断点位置
在每次发送接受文件时
,
先检查有没有临时文件
,
如果有的话就从临时文件中读取断点值
,
并把文件指针移动到
断点位置开始传输
,
这样便可以做到断点续传了
实现流程:
首次传输其流程如下
1.
服务端向客户端传递文件名称和文件长度
2.
跟据文件长度计算文件块数
(
文件分块传输请参照第二篇文章
)
3.
客户端将传输的块数写入临时文件
(
做为断点值
)
4.
若文件传输成功则删除临时文件
首次传输失败后将按以下流程进行
1.
客户端从临时文件读取断点值并发送给服务端
2.
服务端与客户端将文件指针移至断点处
3.
从断点处传输文件