Qt实现TFTP Server和 TFTP Client(一)

1 概述

  TFTP协议是基于UDP的简单文件传输协议,协议双方为Client和Server.Client和Server之间通过5种消息来传输文件,消息前两个字节Code是消息类型,消息内容随消息类型不同而不同。传输模式有三种:octet,netascii和mail,octet为二进制模式,netascii为文本模式,mail为文本模式,不过收到的文本不是保存到文件,而是打印出来,现在已不常用。DATA消息种数据长度是512字节,最后一个数据包可能会小于512。详见TFTP协议

  本文描述如何利用C++基于Qt5.12实现TFTP的Server和Client。

2 概要设计

TFTP客户端通过GetFile来下载文件,通过PutFile上传文件。

2.1 序列图

  • GetFile序列图
     ,----.          ,----------.                  ,----------.
     |User|          |TFTPClient|                  |TFTPServer|
     `-+--'          `----+-----'                  `----+-----'
       |      GetFile     |                             |      
       | ----------------->                             |      
       |                  |                             |      
       |                  | Request of get file over UDP|      
       |                  | ---------------------------->      
       |                  |                             |      
       |                  |   Reponse a file over UDP   |      
       |                  | <----------------------------      
       |                  |                             |      
       |      A File      |                             |      
       | <-----------------                             |      
     ,-+--.          ,----+-----.                  ,----+-----.
     |User|          |TFTPClient|                  |TFTPServer|
     `----'          `----------'                  `----------'
  • PutFile序列图
     ,----.          ,----------.                  ,----------.
     |User|          |TFTPClient|                  |TFTPServer|
     `-+--'          `----+-----'                  `----+-----'
       |      PutFile     |                             |      
       | ----------------->                             |      
       |                  |                             |      
       |                  | Request of put file over UDP|      
       |                  | ---------------------------->      
       |                  |                             |      
       |                  |     Reponse ACK over UDP    |      
       |                  | <----------------------------      
       |                  |                             |      
       |        ACK       |                             |      
       | <-----------------                             |      
     ,-+--.          ,----+-----.                  ,----+-----.
     |User|          |TFTPClient|                  |TFTPServer|
     `----'          `----------'                  `----------'

2.2 类图

如图所示整个软件有8个类:
TFTP类图
类型说明:

  • TFTP类实现TFTP协议。
  • TFtpServerFile类实现服务端文件收发。
  • TFtpClientFile类实现客户端文件收发。
  • BaseUdp类定义UDP写接口。
  • ServerSocket类实现服务端UDP写接口。
  • ClientSocket类实现客户端UDP写接口。
  • TFtpServer类启动服务,等待客户端上传/下载文件。
  • TFtpClient类连服务端来上传/下载文件。

2.3 模块划分

软件划分为如下模块:

  • Core是一个静态库
  • Server是一个EXE程序,调用Core库实现TFTP服务端功能。
  • Client是一个EXE程序,调用Core库实现TFTP客户端功能。
2.3.1 Core

Core包括下面4个类:

  • FTP
  • BaseUdp
  • TFtpClientFile
  • TFtpServerFile
2.3.2 Client

Client包括下面3个类:

  • ClientSocke
  • TFtpClient
  • TFtpClientWidget
2.3.3 Server

Server包括下面3个类:

  • ServerSocket
  • TFtpServer
  • TFtpServerWidget

Qt实现TFTP Server和 TFTP Client(二)

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt是一个跨平台的C++应用程序开发框架,可以用于开发各种类型的应用程序,包括服务器应用程序。TFTP(Trivial File Transfer Protocol)是一种简化的文件传输协议,在Qt中可以通过实现相关的网络类来实现TFTP服务器。 首先,我们需要创建一个Qt的服务器应用程序。可以使用Qt的网络模块,包括QTcpServerQTcpSocket类来实现QTcpServer用于监听和接受客户端的连接请求,QTcpSocket用于处理与客户端的通信。 在TFTP中,服务器应该提供一些基本的操作,例如读取文件(RRQ)和写入文件(WRQ)。为了实现这些操作,我们可以在服务器应用程序中使用QTcpSocket的readyRead信号来读取客户端发送的请求,并根据请求类型进行相应的处理。 例如,当收到RRQ请求时,服务器应该打开相应的文件并读取内容,然后通过QTcpSocket的write方法将文件内容发送给客户端。当收到WRQ请求时,服务器应该创建相应的文件,并通过QTcpSocket的read方法接收客户端发送过来的文件内容,然后写入到文件中。 此外,TFTP还包含一些其他的操作,例如错误报告(ERROR),服务器可选参数(OACK)等。我们可以通过在服务器应用程序中实现相应的逻辑来处理这些操作。 总结起来,要在Qt实现TFTP服务器,我们需要使用Qt的网络模块创建一个服务器应用程序,通过接收和处理客户端的请求,实现TFTP的基本操作。同时,还需要考虑处理错误报告和其他可选参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flysnow010

你的鼓励就是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值