FTP断点续传

FTP客户端实现要建立两个通道,一个控制命令通道,让FTP服务器知道客户端要干什么,一个数据传输通道。所谓的两个通道只不过是两个调用了connect函数的连接,只是控制命令通道专门用来传输一些字符串命令信息(注:服务器响应命令后返回的消息也是通过控制命令通道来传输的)。而数据通道则是用来传输文件。控制命令通道一定是由客户端向服务器的连接(默认的端口是21,也可以指定端口,这要看服务器的设置)。连接的过程完成了FTP的登录。

 

FTP断点续传可分为断点下载和断点上传。

       
  
客户端的实现步骤如下:

 

一、下载:

1、向服务器发送“REST + 本地文件长度”命令,告诉服务器,客户端要断点下载了。这时服务器还不知道客户端要下载哪个文件;

2、向服务器发送“RETR + 文件名”命令,通知服务器要下载的文件名,这时服务器开始定位文件指针读文件并发送数据。

3、客户端定位本地文件指针(文件末尾);

4、两端的准备工作都做完了以后,客户端创建socket,以被动或非被动方式建立数据通道,循环调用recv接收数据并追加入本地文件;

示例:

step1. 查看本地是否有这个文件,如果有,提示用户是覆盖还是续传,用一bool值来记录,如
    bool isRest = true;
step2. 控制端发送"PWD\r\n",接收到正确的回应。(显示当前目录)
step3. 控制端"TYPE I\r\n",接收到正确的回应。
step4. 控制端发送"PASV\r\n",接收到正确的回应,在回应的格式中获得指定的端口,做好指定端口的连接。
step5. 控制端发送"SIZE "+fileName+"\r\n",获得文件大小。(用long型的)
step6.

if(isRest == true)
{
     控制端发送 "REST "+filesize+"\r\n";使服务器搜索服务器端的文件流到指定的断点。
}
esle

{

      就是不续传,不用管

}

step7. 控制端发送"RETR "+fileName+"\r\n",开始从刚才“指定端口的连接的那个socket中”接收文件流,等待正确的回应。

二、上传:

1、获取服务器上和本地要上传文件的同名文件大小;

2、向服务器发送“APPE + 文件名”,通知服务器,接下来从数据通道发送给你的数据要附加到这个文件末尾。

3、定位本地文件指针(和FTP上文件大小相同的位置)

4 、从文件指针处读数据并发送。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值