本页内容

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 地址,每个 IP 地址可选地关联一个子网掩码和/或一个广播地址。 可以通过调用 `addressEntries()` 获取此类三元组列表。此外,当不需要子网掩码、广播地址或其他信息时,可以使用便捷函数 `allAddresses()` 仅获取活动接口的 IP 地址。

QNetworkInterface 还会通过hardwareAddress() 报告接口的硬件地址。

并非所有操作系统都支持报告所有功能。只有 IPv4 地址能保证在所有平台上由该类列出。特别地,IPv6 地址的列出仅在 Windows、Linux、macOS 和 BSD 系统上受支持。同样,type() 返回的接口类型可能并非在所有平台上都可用。

注意:在 Android系统上 ,接口类型始终报告为Unknown ,因为该平台不公开物理接口的硬件类型信息。

另请参阅 QNetworkAddressEntry 。

成员类型文档

enum QNetworkInterface::InterfaceFlag
flags QNetworkInterface::InterfaceFlags

指定与该网络接口相关的标志。可能的值包括:

常量值描述
QNetworkInterface::IsUp0x1网络接口处于“up”状态——由管理员操作启用
QNetworkInterface::IsRunning0x2网络接口处于运行状态:已配置为“up”,且(通常)已物理连接到网络
QNetworkInterface::CanBroadcast0x4该网络接口处于广播模式
QNetworkInterface::IsLoopBack0x8该网络接口是一个回环接口:即,它是一个目标地址为主机本身的虚拟接口
QNetworkInterface::IsPointToPoint0x10该网络接口为点对点接口:即仅有一个其他地址可被其直接访问。
QNetworkInterface::CanMulticast0x20该网络接口支持组播

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

InterfaceFlags 类型是QFlags<InterfaceFlag> 的 typedef 定义。它存储了 InterfaceFlag 值的按“或”运算组合。

enum QNetworkInterface::InterfaceType

指定该接口的硬件类型(PHY层,OSI第1层),如果能够确定的话。未在下面列出的接口类型通常会被标记为“未知”,不过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点对点协议(Point-to-Point Protocol)接口,通过较低的传输层(通常是无线电或物理线路上的串行连接)在两个节点之间建立直接连接。
QNetworkInterface::Slip4串行线路互联网协议接口。
QNetworkInterface::Phonet9使用 Linux Phonet 套接字家族的接口,用于与蜂窝调制解调器通信。更多信息请参阅Linux 内核文档。
QNetworkInterface::Ieee80215410IEEE 802.15.4 个人区域网络接口,不包括 6LoWPAN(见下文)。
QNetworkInterface::SixLoWPAN116LoWPAN(低功耗无线个人区域网络上的 IPv6)接口,其运行在 IEEE 802.15.4 物理层之上,但针对 IPv6 和 UDP 采用了特定的报头压缩方案。此类接口常用于网状网络。
QNetworkInterface::Ieee8021612IEEE 802.16 无线城域网,商业名称为“WiMAX”。
QNetworkInterface::Ieee139413IEEE 1394 接口(又称“FireWire”)。

成员函数文档

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 地址。它相当于对 `allInterfaces()` 返回的所有处于 `QNetworkInterface::IsUp ` 状态的对象调用 `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 系统上,返回此网络接口的易于理解的名称(例如“本地连接”),前提是能够确定该名称。如果无法确定,则该函数的返回结果与name() 相同。 易于理解的名称是用户可以在 Windows 控制面板中修改的名称,因此它可能会在程序执行过程中发生变化。

在 Unix 系统上,该函数目前始终返回与name() 相同的值,因为 Unix 系统不存储可读名称的配置信息。

int QNetworkInterface::index() const

返回接口系统索引(如果已知)。这是一个由操作系统分配的整数,用于标识该接口,通常不会发生变化。它与 IPv6 地址中的“作用域 ID”字段相对应。

如果未知该索引,则该函数返回 0。

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

返回一个表示内部 ID 为index 的接口的QNetworkInterface 对象。网络接口有一个称为“接口索引”的唯一标识符,用于将其与系统上的其他接口区分开来。通常,该值是按顺序分配的,因此被移除后又重新添加的接口每次都会获得不同的值。

该索引也出现在 IPv6 地址的范围标识符(scope 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

返回该接口的最大传输单元(MTU),如果已知;否则返回 0。

最大传输单元(MTU)是指在此接口上发送时,在不引发链路层分片的情况下所能传输的最大数据包大小。应用程序可利用此值计算出能够完整装入未分片的 UDP 数据报中的有效载荷大小。 在计算可传输的有效载荷大小时,请务必减去通过该接口通信时所使用的报头大小,例如 TCP(20 字节)或 UDP(12 字节)、IPv4(20 字节)或 IPv6(40 字节,除非采用某种报头压缩方式)。 另请注意,通往目的地的完整路径上的 MTU(即路径 MTU)可能小于该接口的 MTU。

另请参阅 QUdpSocket 。

QString QNetworkInterface::name() const

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

[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 流的引用。

© 2026 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.