当前位置: 首页 > ai >正文

qt network 整体框架

以下是 Qt 网络模块中 QNetworkInterface、TCP、UDP 及相关类的层次关系图及说明:

一、Qt 网络模块层次结构

 

┌─────────────────────────────────────────────────────────────┐

│ QtNetwork 模块 │

└───────────────────────────┬───────────────────────────────────┘

┌───────────────────────────┼───────────────────────────────────┐

│ 网络接口与地址信息 │

│ ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────┐

│ │ QNetworkInterface │ │ QHostAddress │ │ QUrl │

│ │ - 物理/虚拟网卡 │ │ - IP地址(IPv4/IPv6) │ │ - URL解析│

│ │ - MAC地址 │ │ - 地址类型判断 │ └─────────┘

│ │ - 接口状态 │ │ - 地址转换 │

│ └─────────────────────┘ └─────────────────────┘

└───────────────────────────┼───────────────────────────────────┘

┌───────────────────────────┼───────────────────────────────────┐

│ 传输层协议 │

│ ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────┐

│ │ TCP协议 │ │ UDP协议 │ │ SSL/TLS │

│ │ - QTcpSocket │ │ - QUdpSocket │ │ - QSslSocket│

│ │ - QTcpServer │ │ - QNetworkDatagram │ └─────────┘

│ │ - 可靠、面向连接 │ │ - 不可靠、无连接 │

│ │ - 顺序保证 │ │ - 高效、低延迟 │

│ └─────────────────────┘ └─────────────────────┘

└───────────────────────────┼───────────────────────────────────┘

┌───────────────────────────┼───────────────────────────────────┐

│ 应用层协议 │

│ ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────┐

│ │ HTTP/FTP │ │ WebSocket │ │ 其他 │

│ │ - QNetworkAccessManager │ │ - QWebSocket │ │ - QDnsLookup│

│ │ - QHttpServer │ │ - 双向实时通信 │ └─────────┘

│ │ - REST API支持 │ └─────────────────────┘

│ └─────────────────────┘

└─────────────────────────────────────────────────────────────┘

二、关键类说明

1. 网络接口与地址信息
  • QNetworkInterface
    • 描述物理或虚拟网络接口(如网卡、WiFi、蓝牙)。
    • 提供接口状态(活跃 / 禁用)、MAC 地址、IP 地址列表等信息。
    • 核心方法
      • allInterfaces():获取所有网络接口。
      • allAddresses():获取所有接口的 IP 地址(返回 QList<QHostAddress>)。
  • QHostAddress
    • 存储和操作 IP 地址(IPv4/IPv6)。
    • 核心方法
      • isLoopback():判断是否为回环地址。
      • toIPv4Address():转换为 IPv4 格式。
      • toString():转换为字符串(如 "192.168.1.1")。
2. 传输层协议
  • TCP 相关类
    • QTcpSocket:TCP 客户端,用于连接服务器并收发数据。
    • QTcpServer:TCP 服务器,监听端口并处理客户端连接。
    • 特点
      • 可靠传输(数据有序、无丢失)。
      • 面向连接(需先建立连接再通信)。
  • UDP 相关类
    • QUdpSocket:UDP 通信的基础类,支持广播和组播。
    • QNetworkDatagram(Qt 5.8+):UDP 数据报的高级封装,简化地址管理。
    • 特点
      • 不可靠传输(可能丢包、乱序)。
      • 无连接(直接发送数据,无需提前建立连接)。
3. 应用层协议
  • QNetworkAccessManager
    • 高层 HTTP/FTP 客户端,支持 REST API、文件下载 / 上传。
    • 基于 QTcpSocket 实现,自动处理 HTTP 协议细节。
  • QWebSocket
    • 实现 WebSocket 协议(双向实时通信)。
    • 基于 QTcpSocket 或 QSslSocket 实现。

三、层次关系总结

  1. 底层支撑
    • QNetworkInterface 和 QHostAddress 提供网络接口和 IP 地址的基础信息,为上层协议服务。
  1. 传输层实现
    • TCP/UDP 是传输层核心协议,QTcpSocket/QUdpSocket 封装了底层 Socket API,直接依赖 QHostAddress 指定目标地址。
  1. 应用层封装
    • HTTP/WebSocket 等应用层协议基于 TCP 实现,通过 QNetworkAccessManager/QWebSocket 提供更便捷的接口,无需关心底层连接细节。

四、典型使用场景

场景

关键类

依赖关系

局域网用户发现

QUdpSocket, QHostAddress

- QUdpSocket 发送广播到 QHostAddress::Broadcast- QHostAddress 存储接收方 IP

TCP 聊天服务器

QTcpServer, QTcpSocket

- QTcpServer 监听 QHostAddress 指定的端口- QTcpSocket 处理客户端连接

HTTP 文件下载

QNetworkAccessManager

- 内部使用 QTcpSocket 实现 HTTP 协议- QHostAddress 解析服务器域名

多网卡设备选择特定接口

QNetworkInterface

- 通过 allInterfaces () 获取所有网卡- 选择活跃接口的 IP 地址(QHostAddress)

通过这种分层设计,Qt 网络模块既提供了底层 Socket 级的控制能力,又通过高层类简化了常见网络协议的开发,满足不同场景需求。

http://www.xdnf.cn/news/11984.html

相关文章:

  • 将图形可视化工具的 Python 脚本打包为 Windows 应用程序
  • 【安全攻防与漏洞】​​量子计算对HTTPS的威胁:后量子密码学进展
  • MyBatis-Plus LambdaQuery 高级用法:JSON 路径查询与条件拼接的全场景解析
  • Linux系统-基本指令(6)
  • Python 多线程编程全面学习指南
  • 优化技巧--滑动窗口
  • AI物体识别原理综述与Auto Drive实践
  • 光学系统常用光学参数的测量
  • 武汉火影数字|互动多媒体展项打造:开启沉浸式互动体验
  • python打卡训练营打卡记录day44
  • ShardingSphere 如何解决聚合统计、分页查询和join关联问题
  • 导出onnx的两种方法
  • 高性能图片优化方案
  • 使用PyInstaller将Python脚本打包成可执行文件
  • C++抽象类与多态实战解析
  • [leetcode ] 5.29week | dp | 组合数学 | 图 | 打家劫舍
  • 68 VG的基本信息查询
  • SQL 中 JOIN 的执行顺序优化指南
  • RAMSUN分享全新超值型MM32F0050系列MCU
  • 理解继承与组合的本质:Qt 项目中的设计选择指南
  • 如何量化创新项目的成功标准
  • js鼠标事件大全
  • 滚珠导轨在光学设备中如何实现微米级运动?
  • 简单网络拓扑实验
  • 第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
  • 30 C 语言递归算法详解:基准条件、递归逻辑、循环对比、经典案例(斐波那契、猴子吃桃、汉诺塔、二分查找等)
  • Maskrcnn网络结构学习
  • Ubuntu更新国内源
  • Python 训练营打卡 Day 43
  • Vue前端篇——项目目录结构介绍