【大话QT之十】实现FTP断点续传

本文介绍了如何在QT中使用Qftp类结合原始FTP命令实现断点续传功能,包括上传和下载的详细步骤,以及关键的rawCommand命令使用。在断点上传中,通过设置APPE命令追加文件,而在断点下载中,利用REST命令指定从何处开始下载。还提到了字符编码问题和未来多线程及队列的实现计划。
摘要由CSDN通过智能技术生成

应用需求:

        网盘开发工作逐步进入各部分的整合阶段,当用户在客户端修改或新增加一个文件时,该文件要同步上传到服务器端对应的用户目录下,因此针对数据传输(即:上传、下载)这一块现在既定了三种传输方式,即:Ftp传输、HTTP传输以及基于UDT的传输。且这三种数据传输方式是可配的,可以通过不同的接口调用。相比这三种方式,基于UDT的大量文件传输是比较值得研究与创新的地方,它在底层是基于UDP,在上层实现了可靠性的控制;同时它充分考虑到了基于在公网环境下基于Tcp进行传输时拥塞控制算法的缺点,实现了自己的拥塞控制算法,在实际测试中其性能也是明显高于基于Tcp的传输。关于UDT实现文件传输只进行了技术调研,还没有真正实现,这一部分内容将在后续文章中提及。这三天的时间只实现了基于FTP的支持断点续传的文件上传、下载。

实现原理:

        离我们最近的断点续传的应用例子是:迅雷。当使用迅雷下载一个大文件时,它实现了下面的功能:1> 电脑突然断电或程序突然退出后,当我们重新启动迅雷时它还会从程序退出时已经下载的文件点继续向后下载,而不是文件又从头开始下载。2> 可以设置采用多个线程同时下载,每个线程只下载文件中的某一部分,例如:使用三个线程下载一个9000个字节的文件,则第一个线程下载第1—3000个字节,第二个线程下载第3001—6000个字节,第三个线程下载第6001—9000个字节。这三个线程是同时下载一个文件,只是下载不同的部分,它会把下载的文件片段暂存在某个位置,当三个线程全部下载完成时再拼成一个完整的文件。这里不用多说,其优点显而易见。

        其实,断点续传实现的原理很简单,就是无论是上传还是下载时都可以实时记录下已经上传了或下载了多少字节,如果中间因为某种原因传输断开,下载启动时只需要再重新从已经下载的位置继续下载或上传就可以了。

利用Qftp实现断点续传:

        QT中有一个实现Ftp的类:Qftp,它提供了基本的ftp的使用方式,连接ftp服务器:connectToHost;登录:login;上传:put;下载:get,使用这些方法可以实现与ftp服务器交互实现文件上传、下载。但是使用它原生提供的put与get方法,无法实现断点续传。因此,为了实现断点续传我们需要重新实现文件传输,并在其中添加断点续传的控制。其实Ftp文件传输的本质也是使用Tcp来实现底层的文件传输。大体思

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值