以下是 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 实现。
三、层次关系总结
- 底层支撑
-
- QNetworkInterface 和 QHostAddress 提供网络接口和 IP 地址的基础信息,为上层协议服务。
- 传输层实现
-
- TCP/UDP 是传输层核心协议,QTcpSocket/QUdpSocket 封装了底层 Socket API,直接依赖 QHostAddress 指定目标地址。
- 应用层封装
-
- 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 级的控制能力,又通过高层类简化了常见网络协议的开发,满足不同场景需求。