这篇文章是我本人编写的 在网上也是绝无仅有
一开始发表在我的网易博客上了 结果被转移且被误伤 有可能存在某些字符或文字出错的地方
有时间我会重新编写, 目前大家先看着
ftp是建立在TCP链接的基础上的
要想在单片机上实现FTP需要先实现TCP,如何实现(硬件软件什么的)我就不介绍了 网上一大堆,就是这个FTP没有 这里简单介绍下
前提: 创建两个链接,
1个位TCP客户端连接到FTP服务器的IP和21端口上,
另外一个如果是PASV模式则空闲等待需要传输数据时链接到FTP服务器的指定端口上(客户端模式,链接是需要用上一个链接命令发送PASV获取端口和IP)
如果是PORT模式则另外一个链接为服务器模式上电就开启在需要传输数据时上一个链接先发送
(类似于 PORT 192,168,1,102,14,178 端口号为14*256+178)的帧格式到FTP21端口让FTP服务器知道链接那个端口发数据
下面只介绍PASV模式
FTP链接过程:
1 启动服务器(如何启动FTP服务器就不用说了吧)客户端连接服务器21端口
2 服务器返回欢迎信息 类似 220 Welcome to JDFW FTP Server V4.0.0
3 客户端发送登陆用户名信息 类似 USER veryzhou
4 服务器返回用户名正确信息要求密码 类似 331 Password required for veryzhou
5 客户端发送密码信息 类似 PASS 123sssttt
6 服务器返回登陆成功信息 类似 230 Client :veryzhou successfully logged in. Client IP :192.168.1.102
可选命令: SYST 回复 215 WINDOWS emulated by DXMSOFT. 确定服务器上运行的操作系统
REST 100 和 REST 0 回复 350 Restarting at 100. 重新开始传输文件
PWD 回复 257 "/" is current directory. 显示当前路径
PASV 回复 227 Entering Passive Mode (192,168,1,102,4,0). 被动模式要求服务器监听某个端口并返回给用户,端口号为4*256+0
LIST -al 回复 150 Opening ASCII mode data connection for directory list. 获取的文件列表信息
另一个链接吐出数据:
07-01-15 07:51PM 163 123.txt
07-01-15 08:04PM 38 53287.txt
后回复 226 Transfer complete.
上传一个文件:
发送 SIZE 53286666.txt 查询53286666.txt的长度,或者说查询这个文件是否存在
回复 550 File not found. 如果不是需要改名 (或者创建不可能重名的文件,则不存在这个问题)
回复 213 78 文件状态(78字节)
发送 PASV
回复 227 Entering Passive Mode (192,168,1,102,4,0). 被动模式要求服务器监听某个端口并返回给用户
创建TCP客户端连接IP192.168.1.102端口4*256+0 链接成功后
发送 STOR 53286666.txt 保持另外一个链接的数据到文件53286666.txt,如果这个文件存在则覆盖他
回复 150 Opening BINARY mode data connection for file transfer.
另外一个链接发送文件内容 的空间撒谎的卡和数据库的哈萨克觉得好看82374987349857983475983475798347598734
回复(还是21这个链接)226 Transfer complete. 请求的文件操作成功 另外一个链接已经关闭
(ftp服务器判断另外一个链接断开即回复这个,中间另外一个链接可以多次发送)
发送 SITE UTIME /53286666.txt 20150701124829 20150701124829 20150701124829 UTC 写文件创建,修改,访问时间
回复 502 Command not implemented - Try HELP. 出错可以不管他
这里可以再次获取列表信息判断是否传输成功(其实没必要)
还可以 删除一个文件,读取一个文件等待,如果有权限的话
上面任何一个回复不成功即可中断退出(即全部不成功)
退出FTP:
发送 QUIT
回复 220 Bye 成功推出
关闭21那个链接即可