QNetworkInterface Class

QNetworkInterface 类提供主机 IP 地址和网络接口的列表。更多

头文件: #include <QNetworkInterface>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network

注意:该类中的所有函数都是可重入的

公共类型

enum InterfaceFlag { IsUp, IsRunning, CanBroadcast, IsLoopBack, IsPointToPoint, CanMulticast }
flags InterfaceFlags
enum InterfaceType { Unknown, Loopback, Virtual, Ethernet, Wifi, …, Ieee1394 }

公共函数

QNetworkInterface()
QNetworkInterface(const QNetworkInterface &other)
~QNetworkInterface()
QList<QNetworkAddressEntry> addressEntries() const
QNetworkInterface::InterfaceFlags flags() const
QString hardwareAddress() const
QString humanReadableName() const
int index() const
bool isValid() const
int maximumTransmissionUnit() const
QString name() const
void swap(QNetworkInterface &other)
QNetworkInterface::InterfaceType type() const
QNetworkInterface &operator=(const QNetworkInterface &other)

静态公共成员

QList<QHostAddress> allAddresses()
QList<QNetworkInterface> allInterfaces()
QNetworkInterface interfaceFromIndex(int index)
QNetworkInterface interfaceFromName(const QString &name)
int interfaceIndexFromName(const QString &name)
QString interfaceNameFromIndex(int index)
QDebug operator<<(QDebug debug, const QNetworkInterface &networkInterface)

详细说明

QNetworkInterface 表示连接到运行程序的主机的一个网络接口。每个网络接口可包含零个或多个 IP 地址,每个地址可选择与一个掩码和/或广播地址相关联。可通过addressEntries() 获取这些三元组的列表。如果不需要网络掩码、广播地址或其他信息,也可以使用allAddresses() 方便函数,只获取活动接口的 IP 地址。

QNetworkInterface 还使用hardwareAddress() 报告接口的硬件地址。

并非所有操作系统都支持报告所有功能。在所有平台中,该类只能保证列出 IPv4 地址。尤其是,只有 Windows、Linux、macOS 和 BSD 才支持 IPv6 地址列表。

另请参阅 QNetworkAddressEntry

成员类型文档

enum QNetworkInterface::InterfaceFlag
flags QNetworkInterface::InterfaceFlags

指定与此网络接口相关的标志。可能的值有

常量说明
QNetworkInterface::IsUp0x1网络接口处于 "运行 "状态 - 通过管理操作启用
QNetworkInterface::IsRunning0x2网络接口处于运行状态:配置为 "up "并(通常)与网络物理连接
QNetworkInterface::CanBroadcast0x4网络接口以广播模式工作
QNetworkInterface::IsLoopBack0x8网络接口是环回接口:也就是说,它是一个虚拟接口,其目标是主机本身
QNetworkInterface::IsPointToPoint0x10网络接口是点对点接口:也就是说,它只有一个地址可以直接到达。
QNetworkInterface::CanMulticast0x20网络接口支持组播

请注意,一个网络接口不能既基于广播又是点对点的。

InterfaceFlags 类型是QFlags<InterfaceFlag> 的类型定义。它存储 InterfaceFlag 值的 OR 组合。

enum QNetworkInterface::InterfaceType

指定该接口的硬件类型(PHY 层,OSI 第 1 层)(如果可以确定的话)。不在下面列出的接口类型中的接口类型通常会被列为未知(Unknown),尽管 Qt 的未来版本可能会添加新的枚举值。

可能的值有

常量说明
QNetworkInterface::Unknown0接口类型无法确定或不属于其他列出的类型。
QNetworkInterface::Loopback1虚拟环回接口,分配给环回 IP 地址(127.0.0.1,::1)。
QNetworkInterface::Virtual2确定为虚拟的接口类型,但不属于任何其他可能的类型。例如,隧道接口(目前)被检测为虚拟接口。
QNetworkInterface::Ethernet3IEEE 802.3 以太网接口,但在许多系统中,其他类型的 IEEE 802 接口也可能被检测为以太网接口(尤其是 Wi-Fi)。
QNetworkInterface::Wifi8IEEE 802.11 Wi-Fi 接口。请注意,在某些系统上,QNetworkInterface 可能无法区分普通以太网和 Wi-Fi,因此不会返回此枚举值。
QNetworkInterface::Ieee80211WifiWiFi 的别名。
QNetworkInterface::CanBus5ISO 11898 控制器局域网总线接口,通常用于汽车系统。
QNetworkInterface::Fddi7ANSI X3T12 光纤分布式数据接口,光纤局域网。
QNetworkInterface::Ppp6点对点协议接口,通过较低传输层(通常是无线电或物理线路串行传输层)在两个节点之间建立直接连接。
QNetworkInterface::Slip4串行线路互联网协议接口。
QNetworkInterface::Phonet9使用 Linux Phonet 插口系列的接口,用于与蜂窝调制解调器通信。更多信息,请参阅Linux 内核文档
QNetworkInterface::Ieee80215410IEEE 802.15.4 个人局域网接口,6LoWPAN(见下文)除外。
QNetworkInterface::SixLoWPAN116LoWPAN (IPv6 over Low-power Wireless Personal Area Networks,低功耗无线个人局域网)接口,在 IEEE 802.15.4 物理层上运行,但有特定的 IPv6 和 UDP 标头压缩方案。这种接口通常用于网状网络。
QNetworkInterface::Ieee8021612IEEE 802.16 无线城域网,商业名称为 "WiMAX"。
QNetworkInterface::Ieee139413IEEE 1394 接口(又称 "火线")。

成员功能文档

QNetworkInterface::QNetworkInterface()

构造一个空的网络接口对象。

QNetworkInterface::QNetworkInterface(const QNetworkInterface &other)

创建other 中所含 QNetworkInterface 对象的副本。

[noexcept] QNetworkInterface::~QNetworkInterface()

释放与QNetworkInterface 对象相关的资源。

QList<QNetworkAddressEntry> QNetworkInterface::addressEntries() const

返回该接口拥有的 IP 地址列表及其相关的掩码和广播地址。

如果不需要网络掩码、广播地址或其他信息,可以调用allAddresses() 函数,只获取活动接口的 IP 地址。

[static] QList<QHostAddress> QNetworkInterface::allAddresses()

该方便函数返回在主机上找到的所有 IP 地址。它等同于在处于QNetworkInterface::IsUp 状态的allInterfaces() 返回的所有对象上调用addressEntries() 以获得QNetworkAddressEntry 对象列表,然后在其中每个对象上调用QNetworkAddressEntry::ip() 。

[static] QList<QNetworkInterface> QNetworkInterface::allInterfaces()

返回主机上所有网络接口的列表。如果失败,则返回一个元素为零的列表。

QNetworkInterface::InterfaceFlags QNetworkInterface::flags() const

返回与此网络接口相关的标志。

QString QNetworkInterface::hardwareAddress() const

返回此接口的底层硬件地址。在以太网接口上,这将是一个用冒号分隔的字符串表示的 MAC 地址。

其他接口类型可能有其他类型的硬件地址。程序实现不应依赖于此函数是否能返回有效的 MAC 地址。

另请参阅 type()。

QString QNetworkInterface::humanReadableName() const

如果可以确定该网络接口的名称,则返回 Windows 上该网络接口的人可读名称,如 "Local Area Connection(局域网连接)"。如果无法确定,该函数的返回值与name() 相同。可读名称是用户可以在 Windows 控制面板中修改的名称,因此在程序执行过程中可能会发生变化。

在 Unix 系统中,由于 Unix 系统不存储人可读名称的配置,因此该函数目前的返回值与name() 相同。

int QNetworkInterface::index() const

返回已知的接口系统索引。这是操作系统分配的一个整数,用于标识此接口,一般不会更改。它与 IPv6 地址中的作用域 ID 字段相匹配。

如果不知道索引,该函数将返回 0。

[static] QNetworkInterface QNetworkInterface::interfaceFromIndex(int index)

返回内部 ID 为index 的接口的QNetworkInterface 对象。网络接口有一个称为 "接口索引 "的唯一标识符,以区别于系统中的其他接口。通常,这个值是逐步分配的,每次删除和添加的接口都会得到不同的值。

该索引也存在于 IPv6 地址的作用域 ID 字段中。

[static] QNetworkInterface QNetworkInterface::interfaceFromName(const QString &name)

返回名为name 的接口的QNetworkInterface 对象。如果不存在这样的接口,该函数将返回一个无效的QNetworkInterface 对象。

字符串name 可以是实际的接口名称(如 "eth0 "或 "en1"),也可以是以字符串形式表示的接口索引("1"、"2 "等)。

另请参阅 name() 和isValid()。

[static] int QNetworkInterface::interfaceIndexFromName(const QString &name)

返回名称为name 的接口的索引,如果没有名称为 的接口,则返回 0。该函数产生的结果与下面的代码相同,但执行速度可能更快。

    QNetworkInterface::interfaceFromName(name).index()

另请参见 interfaceFromName()、interfaceNameFromIndex() 和QNetworkDatagram::interfaceIndex()。

[static] QString QNetworkInterface::interfaceNameFromIndex(int index)

返回索引为index 的接口名称,如果没有索引为 的接口,则返回空字符串。该函数产生的结果与下面的代码相同,但执行速度可能更快。

    QNetworkInterface::interfaceFromIndex(index).name()

另请参见 interfaceFromIndex()、interfaceIndexFromName() 和QNetworkDatagram::interfaceIndex()。

bool QNetworkInterface::isValid() const

如果QNetworkInterface 对象包含网络接口的有效信息,则返回true

int QNetworkInterface::maximumTransmissionUnit() const

返回此接口上的最大传输单位(如果已知),否则返回 0。

最大传输单元是指在不引起链路级分片的情况下,可在此接口上发送的最大数据包。应用程序可使用此值计算适合未分片 UDP 数据报的有效负载大小。记住,在计算可以传输的有效负载大小时,要减去接口通信中使用的报头大小,如 TCP(20 字节)或 UDP(12 字节)、IPv4(20 字节)或 IPv6(40 字节,如果没有某种形式的报头压缩)。还要注意的是,通往目的地的全路径 MTU(路径 MTU)可能小于接口的 MTU。

另请参阅 QUdpSocket

QString QNetworkInterface::name() const

返回网络接口的名称。在 Unix 系统中,这是一个字符串,包含接口类型和可选的序列号,如 "eth0"、"lo "或 "pcn0"。在 Windows 系统中,这是一个用户无法更改的内部 ID。

[noexcept] void QNetworkInterface::swap(QNetworkInterface &other)

将此网络接口实例与other 互换。该操作速度非常快,从未出现过故障。

QNetworkInterface::InterfaceType QNetworkInterface::type() const

如果可以确定接口类型,则返回接口类型。如果无法确定,则返回QNetworkInterface::Unknown

另请参见 hardwareAddress()。

QNetworkInterface &QNetworkInterface::operator=(const QNetworkInterface &other)

other 中包含的QNetworkInterface 对象的内容复制到此对象中。

相关非会员

QDebug operator<<(QDebug debug, const QNetworkInterface &networkInterface)

QNetworkInterface networkInterface 写入数据流,并返回对debug 数据流的引用。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.