基于C语言实现的一个ftp_client demo

前言:
之前写过一篇在ubuntu搭建ftp服务器的文章(基于ubuntu16.04搭建ftp服务器),下面给出的代码程序可以基于此ftp服务器测试;

一 .FTP协议
FTP全称:文件传输协议(File Transfer Protocol), 不同于普通的C/S通信方式,ftp协议是建立两个链路去传输数据和控制消息。
有两种工作模式:主动连接模式(PORT)和被动连接模式(PASV),这两种工作方式的描述都是从服务器角度出发描述的。简单来说就是:服务器主动连接客户端,这就是主动模式;如果是客户端主动去连接服务器就是被动模式。
主动模式:客户端随机打开一个大于1024的端口N向服务器命令端口(21),发起连接,同时开放N+1端口监听,并向服务器发出“port N+1”命令,有服务器从他自己的数据端口(20)主动连接到客户端指定的数据端口(N+1);这种属于外部到内部的连接,很可能被阻塞
被动模式:命令和数据连接都有客户端发起,这样就解决了从服务器到客户端的数据端口连接被防火墙过滤的问题。被动模式下,当开启一个FTP连接是,客户端打开两个任意的本地端口(N和N+1)。第一个端口连接服务器的控制端口21,提交PASV命令。然后服务器就会开启一个任意的端口(P > 1024),返回如“entering passive mode(127,0,0,1,4,18)”,他返回227开头的信息,在括号中六个用逗号隔开的数字,前四个是服务器IP,后面两个数字倒数第二个*256+最后一个得到的数字就是服务器的用来传输数据的端口。客户端收到这条命令之后,会通过N+1端口去连接服务器的端口,然后进行数据传输。
二.主要用到的命令
USER: 指定用户名。通常是控制连接后第一个发出的命令。“USER gaoleyi\r\n”: 用户名为gaoleyi 登录。
PASS: 指定用户密码。该命令紧跟 USER 命令后。“PASS gaoleyi\r\n”:密码为 gaoleyi。
SIZE: 从服务器上返回指定文件的大小。“SIZE file.txt\r\n”:如果 file.txt 文件存在,则返回该文件的大小。
CWD: 改变工作目录。如:“CWD dirname\r\n”。
PASV: 让服务器在数据端口监听,进入被动模式。如:“PASV\r\n”。
PORT: 告诉 FTP 服务器客户端监听的端口号,让 FTP 服务器采用主动模式连接客户端。如:“PORT h1,h2,h3,h4,p1,p2”。
RETR: 下载文件。“RETR file.txt \r\n”:下载文件 file.txt。
STOR: 上传文件。“STOR file.txt\r\n”:上传文件 file.txt。
REST: 该命令并不传送文件,而是略过指定点后的数据。此命令后应该跟其它要求文件传输的 FTP 命令。“REST 100\r\n”:重新指定文件传送的偏移量为 100 字节。
QUIT: 关闭与服务器的连接。
三.实现
软件实现:明天代码实现客户端,连接如下:
附上码云库地址

最后声明感谢以下博客:
1.https://www.pianshen.com/article/3408328120/
2.https://www.cnblogs.com/luoxn28/p/5585458.html
3.https://blog.csdn.net/zhubao124/article/details/81662775

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值