应用需求:
网盘开发工作逐步进入各部分的整合阶段,当用户在client改动或新添加一个文件时。该文件要同步上传到server端相应的用户文件夹下,因此针对传输数据(即:上传、下载)这一块如今既定了三种传输方式,即:Ftp传输、HTTP传输以及基于UDT的传输。
且这三种传输数据方式是可配的,能够通过不同的接口调用。相比这三种方式。基于UDT的大量文件传输是比較值得研究与创新的地方,它在底层是基于UDP,在上层实现了可靠性的控制;同一时候它充分考虑到了基于在公网环境下基于Tcp进行传输时拥塞控制算法的缺点,实现了自己的拥塞控制算法,在实际測试中其性能也是明显高于基于Tcp的传输。
关于UDT实现文件传输仅仅进行了技术调研,还没有真正实现。这一部分内容将在兴许文章中提及。这三天的时间仅仅实现了基于FTP的支持断点续传的文件上传、下载。
实现原理:
离我们近期的断点续传的应用样例是:迅雷。当使用迅雷下载一个大文件时,它实现了以下的功能:1> 电脑突然断电或程序突然退出后,当我们又一次启动迅雷时它还会从程序退出时已经下载的文件点继续向后下载,而不是文件又从头開始下载。2> 能够设置採用多个线程同一时候下载,每一个线程仅仅下载文件里的某一部分,比如:使用三个线程下载一个9000个字节的文件。则第一个线程下载第1—3000个字节,第二个线程下载第3001—6000个字节,第三个线程下载第6001—9000个字节。这三个线程是同一时候下载一个文件,仅仅是下载不同的部分。它会把下载的文件片段暂存在某个位置,当三个线程所有下载完毕时再拼成一个完整的文件。
这里不用多说,其长处显而易见。
事实上,断点续传实现的原理非常easy,就是不管是上传还是下载时都能够实时记录下已经上传了或下载了多少字节,假设中间由于某种原因传输断开,下载启动时仅仅须要再又一次从已经下载的位置继续下载或上传就能够了。
利用Qftp实现断点续传:
QT中有一个实现Ftp的类:Qftp,它提供了主要的ftp的使用方式,连接ftpserver:connectToHost;登录:login。上传:put;下载:get。使用这些方法能够实现与ftpserver交互实现文件上传、下载。
可是使用它原