(P17)miniftpd项目实战17:上传文件,断点续传

1.上传文件

  • vsftpd的实现
    在这里插入图片描述
    客户端发送STOR命令,跟上实际要上传的文件名,服务器端回一个150,接着客户端就可以不断读取文件的内容把它发送到服务器端,通过数据socket发送给服务器端,服务器端不断接收,直到客户端断开数据socket,服务器端接收为0,就退出了循环,表示接收完毕,给客户端一个226的应答,这就是上传的命令
    在这里插入图片描述

2.断点续传

  • vsftpd断点续传功能,使用的ftp客户端版本号是leapFTP3.0.1版本
    上传一个文件,然后将其中断
    在这里插入图片描述
    然后再开始断点续传
    在这里插入图片描述
    断点续传会发送的命令如下:首先发送TYPE I命令,接着是PASV命令
    在这里插入图片描述
上传:STOR									下载:RETR
	
断点续传:REST,STOR						端点续载:REST,RETR

APPE方式实现断点续传:APPE
  • leapFTP2.7.6版本的ftp客户端通过APPE方式实现断点续传
    在这里插入图片描述
    通过上面的类似操作,也可以实现断点续传
    在这里插入图片描述

  • eg:ftpproto.c

void upload_common(session_t *sess, int is_append)
static void do_stor(session_t *sess)
static void do_appe(session_t *sess)

sysutil.h

int lock_file_read(int fd);
int lock_file_write(int fd);
int unlock_file(int fd);
  • 测试:使用LeapFTP2.7.6版本进行测试,如果是LeapFTP3.0.1,只能测试REST+STOR的续传方式
    使用APPE的方式进行断点续传
    不论是断点下载还是断点续传,实际上,断点位置都是由客户端维护的,因为客户端首先发送一个REST命令表示断点的位置,APPE模式的话,客户端也会维护一个当前文件的偏移量,要与服务器端的文件大小相对应,即客户端上传文件的话,肯定也是从文件的对应的位置开始上传文件,如果从头开始上传文件的话,把它添加到服务器上面的文件后面,数据也是不对的。
    所以服务端只需要正确处理:REST,RETR,APPE这些命令即可。
    在这里插入图片描述
    在这里插入图片描述
    断开
    在这里插入图片描述
    再次连接后,再次上传
    在这里插入图片描述
    在这里插入图片描述

  • 测试:不使用APPE的方式进行断点续传
    在这里插入图片描述
    断开
    在这里插入图片描述

再次连接
在这里插入图片描述
再次上传,可以点击续传
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值