实现一个FTP服务端(Qt)

源代码

https://gitee.com/yjwx0017/ftpserver

参考

FTP 协议简介

命令连接负责传送命令,数据连接负责传送数据。

服务端启动后在21端口监听,接受客户端连接。

命令格式,例如:

1
2
client --> server: USER username\r\n
client <-- server: 331 User name okay, need password.\r\n

命令交互方式为:客户端发送一个命令,服务端返回响应(返回代码 + 描述)。

部分命令:

  • USER命令 指定用户名

  • PASS命令 指定密码

  • PORT命令 主动模式,服务端将连接到客户端提供的IP地址和端口(数据连接)

  • PASV命令 被动模式,服务端启动监听,接受客户端的连接(数据连接)

  • TYPE命令 指定二进制模式还是ASCII模式

  • CWD 命令 更改当前目录

  • CDUP命令 切换到上级目录

  • QUIT命令 断开连接

  • DELE命令 删除文件

  • RMD 命令 删除目录

  • MKD 命令 创建目录

  • PWD 命令 输出当前目录

  • RNFR命令 指定重命名的源(Rename From)

  • RNTO命令 指定重命名的目标(Rename To)

  • LIST命令 列出当前目录下的所有内容

  • NLST命令 列出当前目录下的所有内容(只包含名称)

  • RETR命令 下载文件(Retrieve)

  • STOR命令 上传文件(Store)

  • STOU命令 上传文件(不覆盖重名文件, Store Unique)

  • APPE命令 上传文件(以附加的方式, Append)

  • REST命令 指定断点续传的位置(Restart)

  • FEAT命令 查询支持的扩展特性(比如 UTF8 )

  • OPTS命令 启用禁用某特性(比如 OPTS UTF8 ON)