QNetworkInterface 类

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

头文件 #include <QNetworkInterface>
CMakefind_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmakeQT += network

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

公有类型

枚举InterfaceFlag { IsUp, IsRunning, CanBroadcast, IsLoopBack, IsPointToPoint, CanMulticast }
标志InterfaceFlags
枚举InterfaceType { Unknown, Loopback, Virtual, Ethernet, Wifi, …, Ieee1394 }

公有函数

QNetworkInterface()
QNetworkInterface(const QNetworkInterface &other)
~QNetworkInterface()
QList<QNetworkAddressEntry>addressEntries() const
QNetworkInterface::InterfaceFlagsflags() const
QStringhardwareAddress() const
QStringhumanReadableName() const
intindex() const
boolisValid() const
intmaximumTransmissionUnit() const
QStringname() const
voidswap(QNetworkInterface &other)
QNetworkInterface::InterfaceTypetype() const
QNetworkInterface &operator=(const QNetworkInterface &other)

静态公有成员

QList<QHostAddress>allAddresses()
QList<QNetworkInterface>allInterfaces()
QNetworkInterfaceinterfaceFromIndex(int index)
QNetworkInterfaceinterfaceFromName(const QString &name)
intinterfaceIndexFromName(const QString &name)
QStringinterfaceNameFromIndex(int index)
QDebugoperator<<(QDebug debug, const QNetworkInterface &networkInterface)

详细描述

QNetworkInterface 表示程序正在运行的主机上附加的网络接口。每个网络接口可能包含零个或多个IP地址,每个地址都可以选择性地与子网掩码和/或广播地址关联。可以通过 addressEntries() 获取此类三元组的列表。或者,当不需要子网掩码、广播地址或其他信息时,使用 allAddresses() 便利函数来获取活动接口的IP地址。

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

并非所有操作系统都支持报告所有功能。在有所有平台上,此类保证列出IPv4地址。特别是,IPv6地址列表仅在Windows、Linux、macOS和BSD上受支持。

另请参阅 QNetworkAddressEntry

成员类型文档

枚举 QNetworkInterface::InterfaceFlag
类型 QNetworkInterface::InterfaceFlags

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

常量描述
QNetworkInterface::IsUp0x1网络接口是 "开启" 的 - 由管理员操作启用
QNetworkInterface::IsRunning0x2网络接口是工作的:配置为 "开启" 并且(通常)物理连接到网络
QNetworkInterface::CanBroadcast0x4网络接口在广播模式下工作
QNetworkInterface::IsLoopBack0x8网络接口是回环接口:即它是一个以主机计算机自身为目标的虚拟接口
QNetworkInterface::IsPointToPoint0x10网络接口是点对点接口:即只有一个,单地址可以由它直接到达。
QNetworkInterface::CanMulticast0x20网络接口支持多播

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

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

枚举 QNetworkInterface::InterfaceType

指定此接口如果可以确定则为硬件(物理层,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::Ieee80211Wi-FiWiFi 的别名。
QNetworkInterface::CanBus5ISO 11898 控制器区域网络总线接口,通常在汽车系统上找到。
QNetworkInterface::Fddi7ANSI X3T12 光纤分布式数据接口,光纤上的局域网。
QNetworkInterface::Ppp6点对点协议接口,在底层传输层(通常是无线电或物理线)间建立两个节点之间的直接连接。
QNetworkInterface::Slip4串行线路互联网协议接口。
QNetworkInterface::Phonet9使用Linux Phonet套接字家族的接口,用于与蜂窝调制解调器通信。更多信息请参阅Linux内核文档
QNetworkInterface::Ieee80215410IEEE 802.15.4个人区域网络接口,除了6LoWPAN(见下文)。
QNetworkInterface::SixLoWPAN116LoWPAN(IPv6在低功耗无线个人区域网络中)接口,它运行在IEEE 802.15.4物理层上,但具有针对IPv6和UDP的特定头部压缩方案。此类接口通常用于Mesh网络。
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地址。它等价于在allInterfaces()返回的所有对象上调用addressEntries(),这些对象处于QNetworkInterface::IsUp状态,然后对每个这样的对象调用QNetworkAddressEntry::ip()。

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

返回主机机器上找到的所有网络接口的列表。如果失败,它返回包含零个元素的列表。

QNetworkInterface::InterfaceFlags QNetworkInterface::flags() const

返回与该网络接口关联的标志。

QString QNetworkInterface::hardwareAddress() const

返回此接口的低级别硬件地址。对于以太网接口,这将是表示为字符串的MAC地址,由冒号分隔。

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

另请参阅 类型()。

QString QNetworkInterface::humanReadableName() const

返回Windows上此网络接口的易读名称,例如 "本地连接",如果可以确定名称。如果无法确定,则此函数返回与 name() 相同的值。易读名称是用户可以在Windows控制面板中修改的名称,因此它可能在程序执行期间更改。

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

int QNetworkInterface::index() const

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

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

[静态] QNetworkInterface QNetworkInterface::interfaceFromIndex(int index)

返回具有内部ID为 indexQNetworkInterface 对象。网络接口有一个唯一的标识符,称为“接口索引”,用于区分系统中其他接口。通常,此值是逐步分配的,移除后再添加的接口每次都会获得不同的值。

此索引还出现在IPv6地址的作用域ID字段中。

[静态] QNetworkInterface QNetworkInterface::interfaceFromName(const QString &name)

返回名为 nameQNetworkInterface 对象。如果不存在此类接口,则此函数返回一个无效的 QNetworkInterface 对象。

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

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

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

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

    QNetworkInterface::interfaceFromName(name).index()

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

[静态] 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。

最大传输单元是可以在不引起链路层碎片化的情况下发送的最大数据包。应用程序可以使用此值来计算未fragmented的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 流。

© 2024 Qt 公司 Ltd. 本文档内的文档贡献属于其各自版权所有者。提供的文档是在自由软件基金会(Free Software Foundation)发布的GNU自由文档许可证(GNU Free Documentation License)版本1.3的条款下许可的。Qt 和相应的标志是芬兰的 Qt 公司 Ltd 或其他国家的商标。所有其他商标均为其各自所有者的财产。