基于C++和QT实现的FTP客户机程序

资源下载地址:https://download.csdn.net/download/sheziqiong/85601221

FTP 客户机程序实现

一、要求

实现一个 FTP 客户机程序,具体要求:

Windows 平台上,图形用户界面,编程语言不限;

输入 FTP 服务相关信息(FTP 服务器、账号、密码),获取服务器的文件列表,实现 FTP 命令(USER、PASS、LIST、RETR 与 QUIT),显示交互过程。

撰写说明文档,包括:编程环境、关键问题、程序流程、测试截图等;

提交全部程序,包括:源代码、可执行程序、说明文档等。

二、FTP 协议

FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP 协议包括两个组成部分,其一为 FTP 服务器,其二为 FTP 客户端。其中 FTP 服务器用来存储文件,用户可以使用 FTP 客户端通过 FTP 协议访问位于 FTP 服务器上的资源。在开发网站的时候,通常利用 FTP 协议把网页或程序传到 Web 服务器上。此外,由于 FTP 传输效率非常高,在网络上传输大的文件时,一般也采用该协议。

  • 工作方式

FTP 支持两种模式,一种方式叫做 Standard (也就是 PORT 方式,主动方式),一种是 Passive(也就是 PASV,被动方式)。Standard 模式:FTP 的客户端发送 PORT 命令到 FTP 服务器。Passive 模式:FTP 的客户端发送 PASV 命令到 FTP 服务器。

主动模式:FTP 客户端首先和 FTP 服务器的 21 端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送 PORT 命令。PORT 命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的 20 端口连接至客户端的指定端口发送数据。FTP 服务器必须和客户端建立一个新的连接用来传送数据。

被动模式:FTP 服务器收到 PASV 命令后,随机打开一个高端端口(大于 1024)并且通知客户端在这个端口上传送数据的请求,客户端连接 FTP 服务器此端口,通过三次握手建立通道,然后 FTP 服务器将通过这个端口进行数据的传送。

  • 命令描述
命令 描述
DELE 删除服务器上的指定文件
LIST 如果是文件名列出文件信息,如果是目录则列出文件列表
PASS 系统登录密码
PASV 请求服务器等待数据连接
QUIT 从 FTP 服务器上退出登录
RETR 从服务器上找回(复制)文件
STOR 储存(复制)文件到服务器上
USER 系统登录的用户名
  • 标准 FTP 信息
响应代码 解释说明
150 打开连接
200 成功
221 退出网络
225 打开数据连接
227 进入被动模式(IP 地址、端口号)
230 登录因特网
250 文件行为完成
331 要求密码

三、开发环境

硬件环境 Intel® Core™i7 CPU, 16.00GB DDR
操作系统 Microsoft Windows 10
开发环境 Qt Creator 4.10.0
编程语言 C++
界面框架 Qt

四、程序流程图

在这里插入图片描述

五、关键问题

5.1 登录认证

用户每次进行登录操作时,程序会先向 FTP 服务器发出“USER 用户名”请求。待接收到来自服务器的 331 标识码后,再向 FTP 服务器发出“PASS 密码”请求。待接收到来自服务器的 230 标识码后,表明用户登录成功。

5.2 交互模式

FTP 协议中定义了两种客户端与服务器交互的模式类型:主动模式与被动模式。我的客户端程序采用被动模式来与服务器进行交互。在每次进行数据请求前,程序先向服务器发出“PASV”命令,待接收到 227 标识码后解析得到服务器端的数据通信端口。客户端程序再建立数据传输套接字与服务器进行数据通信连接。

在这里插入图片描述

5.3 解析目录信息

客户端获取 FTP 服务器文件目录信息时,先发出“PASV”命令建立起数据通信连接后,再发出“LIST”命令。待客户端数据通信套接字接收到数据时,进行文件目录的解析工作。由于返回的文件目录是以“\r\n”结尾划分每个文件条目的,客户端程序按照该规则解析每个文件或文件夹。

5.4 上传文件

客户端进行上传文件操作时,先发出“PASV”命令建立起数据通信连接后,再发出“STOR 文件名”命令,通过数据通信套接字将文件字节发送至 FTP 服务器。

5.5 下载文件

客户端进行下载文件操作时,先发出“PASV”命令建立起数据通信连接后,再发出“RETR 文件名”命令。待接收到来自 FTP 服务器的数据传输时,使用 waitForReadyRead 函数循环接收全部的文件字节。待接收完毕后,通过文件对象的 write 方法保存文件至本地。

在这里插入图片描述

六、测试截图

6.1 主页面展示

在这里插入图片描述
在这里插入图片描述

程序界面主要包括两部分:登录信息以及文件目录列表。

“登录信息”部分主要提供用户输入 FTP 服务器地址、用户名、用户密码。待用户输入完所有信息,点击“登录”按钮,程序将会向 FTP 服务器发起登录请求。若认证成功,则会返回文件目录列表。若失败,则会弹出警告提示信息。

用户登录成功后,主界面将会展示 FTP 服务器上的文件目录列表。用户单击文件夹时,程序会向 FTP 服务器发起请求获取该目录下的文件信息。如此一来,无需将服务器的文件列表全部获取,减轻内存压力。

若用户点击“退出”按钮,程序向 FTP 服务器发出“QUIT”指令,完成退出操作。

6.2 上传功能

在这里插入图片描述

用户登录成功后,可通过右击文件目录列表中的文件夹或文件,进行“上传”操作。当右击文件夹时,上传的文件会保存在该文件夹下。当右击文件时,上传的文件会保存在该文件同一目录下。

当用户点击“上传”按钮后,系统弹出文件选择框。用户选中要上传的文件后,点击“打开”按钮,程序会进行上传操作。待上传完成后,相应目录下会添加上该文件的条目信息。

6.3 删除功能

用户登录成功后,可通过右击文件目录列表中的文件,进行“删除”操作。

用户通过右击选中要删除的文件,点击“删除”按钮,程序将会发起请求将 FTP 服务器上的该文件删除。操作成功后,状态栏提示“删除成功”。同时,目录列表中的该文件消失。

6.4 下载功能

用户登录成功后,可通过左键双击文件,进行“下载”操作。当用户双击文件后,系统弹出文件保存路径框。用户选择完要保存的文件路径后,点击“保存”按钮,即可将 FTP 服务器上的选中文件保存到指定路径下。

资源下载地址:https://download.csdn.net/download/sheziqiong/85601221

猜你喜欢

转载自blog.csdn.net/newlw/article/details/125219489