您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> VC/MFC >> 多线程断点续传

多线程断点续传

来源:网络整理     时间:2016/8/4 17:18:58     关键词:

关于网友提出的“ 多线程断点续传”问题疑问,本网通过在网上对“ 多线程断点续传”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 多线程断点续传
描述:

大家好:
    我现在想做个多线程断点续传的程序,但是网上的东西被一个地方拷贝到另外一个地方,关于这个主题的贴子几乎是重复的。所以想到这里来请教下;
    如果我想同时传三个文件,每个文件都在500MB到1G之间。我想实现的效果就是像迅累一样,点击传输文件,三个文件就可以同时传输,我在网络上看了下多线程续传原理,说是把一个文件分割成几个块,然后就建立几个线程,而我这里有三个大文件,不只要要建立多少个线程,每个线程又是一个TCP或者UDP的连接。 
哎 头痛。
请有这方面经验的大哥大姐门,介绍下你们以前是怎么做的,越详细越好,因为才接触这个东西,有源代码就更加感谢(VCKBASE那个除外,源代码写的一塌糊涂)。
 谢谢了。。。。


解决方案1:

迅雷是p2p技术,并且有明显的盗链现象,呵呵,和你的要求不太一样,和早期的网络快车应该差不多
向你这种情况的话,我不建议你三个文件一起上传,最好是一个一个的来,比如对方空间不足了,那全都传到一半,不就惨了
一个文件上传的话,用二进制打开文件,需要分片,比如1kb一个片吧,需要建立日志文件,就是哪一片传完了,记下来,这样可以续传的
然后多个线程读取文件,向目标机器传送,比如连个线程的话,就一个从文件开始,一个从文件1/2处传,接收方就要获取所有分片,写入文件(实现分配好空间),并记录日志
传完后,再传下一个文件

解决方案2:

一般文件断点续传原理:
先申请 文件大小 的硬盘空间
即创建或打开(续传时)文件
读写文件
收发数据(上传下载)
内存缓冲
读写文件
用log记录已读写的字节数
多个线程时就要将文件分块了
多个线程断点续传多个文件 只用一个socket的连接 是可以的
也就是多个线程send或recv同一个socket而已
send或recv里的缓冲有个字段是 文件名 之类的吧
就以它为标志区分各个文件吧(可自行设计,如文件句柄)
开始当然先发 文件大小 等属性过去咯(多个也可以)
接收端为文件申请硬盘空间,成功和失败的都发送结果回来
发送端就可以打开那些成功的文件进行传输。
如:
一个 socket s;
线程A B C D E F G H I
文件1 2 3
主线程
打开文件1,2,3,获取文件属性,
发送出去,等待 服务端为文件申请硬盘空间处理后,接收结果
假设这里3个文件都是成功的
分配任务:
线程A B C 都分别读 文件1的不同部分,再send(s)
线程D E F G 都分别读 文件2的不同部分,再send(s)
线程H I 都分别读 文件2的不同部分,再send(s)
服务端接收到数据后 根据文件名进行写文件
自己多摸索


以上介绍了“ 多线程断点续传”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3107874.html

相关图片

相关文章