利用Qt设计的FTP文件传输系统(C/C++)

本题目是我们课程设计的一个题目,我与队友胡亘宇共同完成了此项目。近期在家闲来无事,故来分享一下。我们的设计时间只有不到五天,因此缺漏之处,还望海涵。
话不多说,先上资源。 都是Qt工程:
链接:https://pan.baidu.com/s/1tnwKxB5f6UZ6N_RpjjE6WA
提取码:xt02
(永久有效)
一、FTP原理
从FTP组成部分来看,FTP由客户端(client)和服务器(sever)组成。其中服务器用于储存文件,其上面的资源可以被客户端访问。FTP包括了两个通道,一是数据通道,二是命令通道。顾名思义,命令通道负责传输命令,命令从客户端发出,服务器接收。数据通道用于传送文件,或服务器向客户端发送的文件列表。
从工作方式来看,FTP分为主动方式(Active或Standard)和被动方式(Passive)。在主动模式中,FTP 客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己数据端口的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。在被动模式中,客户端主动连接服务器端。二者会通过命令通道相互交换信息,客户端就会知道服务端的随机端口号。建立控制通道的时候和Standard模式类似,当客户端通过这个通道发送PASV命令的时候,FTP server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server 将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。需要注意的是,在被动模式中FTP会工作在大于1024的随机端口,而不是20和21端口。
FTP结构图如下图所示。
在这里插入图片描述
比较这两种工作模式, FTP 的standard和pasv模式最主要区别就是数据端口连接方式不同,FTP standard模式只要开启服务器的21和20端口,而FTP pasv需要开启服务器大于1024所有tcp端口和21端口。重网络安全的角度来看的话似乎FTP standard模式更安全,而FTP pasv更不安全,那么为什么RFC要在FTP standard基础再制定一个FTP pasv模式呢?其实RFC制定FTP pasv模式的主要目的是为了数据传输安全角度出发的,因为FTP standard使用固定20端口进行传输数据,那么作为黑客很容使用探嗅器抓取FTP数据,这样一来通过FTP standard模式传输数据很容易被黑客窃取,因此使用pasv方式来架设FTP server是最安全绝佳方案。
本次课程设计我们采用pasv方式。
具体地,在TCP通信中,客户端与服务器在建立连接时通常采用三次握手规则,断开连接时通常采用四次挥手规则。下面简单介绍一下三次握手与四次挥手。需要注意的是,三次握手过程已经在winsock(winsock2)库中的connect函数中实现,无需自己编程。
二、AES加密算法原理
AES原理我主要通过博客AES原理进行的学习。
三、软件流程框图

网络拓扑结构图如下:
在这里插入图片描述
可以看到我们有一个服务器,同时可以支持多个客户端的多线程操作。加上特殊的加密方式,使得不同客户端之间的传送文件无法被其它客户端破解。可以说我们的文件传输系统,即保证了多用户使用的便捷性,又确保了不同用户之间的安全性。因为时间以及实验目的的缘故,目前的连接都是建立在局域网内部的。

客户端的流程图如下:
在这里插入图片描述
客户端的流程大致如下:

  1. 调出MainWindow后,接受到建立连接的消息,新建套接字并根据客户输入的IP地址和端口号与服务器端的建立连接。
  2. 进行等待操作的步骤,对于客户端传入的指令进行对应函数的执行,对于需要与服务器交互的指令,将会有发送读取报文的操作。
  3. 接受到退出的指令之后,会发送消息,与服务器断开链接,然后关闭所有的内容。

服务器端的工作流程图如下:
在这里插入图片描述
服务器端的流程大致如下:

  1. 首先,在开启服务器端后,需要进行端口号的设置并且会创建套接字,等待用户的连接。
  2. 当有用户接入的时候,会创建新的现成与新的套接字,进而与客户端建立起连接。
  3. 根据客户端发送的报文的CMD指令,会执行不同的6种操作,一直与客户端进行连接直到客户端主动断开或者服务器端被关闭。
  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值