♻️ 资源

大小: 24.8MB

➡️ 资源下载:https://download.csdn.net/download/s1t16/87450291

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(R) Core(TM)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 服务器上的选中文件保存到指定路径下。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐