Qt之QNetworkAddressEntry

简介: 简述QNetworkAddressEntry类由网络接口支持,存储了一个IP地址,子网掩码和广播地址。每个网络接口可以包含零个或多个IP地址,进而可以关联到一个子网掩码和/或一个广播地址(取决于操作系统的支持)。这个类代表一个这样的组。简述常用接口使用更多参考常用接口 QHostAddress broadcast() co

简述

QNetworkAddressEntry类由网络接口支持,存储了一个IP地址,子网掩码和广播地址。

每个网络接口可以包含零个或多个IP地址,进而可以关联到一个子网掩码和/或一个广播地址(取决于操作系统的支持)。

这个类代表一个这样的组。

常用接口

QHostAddress broadcast() const

返回IPv4地址和子网掩码相关联的广播地址。

对于IPv6地址来说,返回的总是空,因为广播的概念已被抛弃,为了系统支持多播。


QHostAddress ip() const

返回一个网络接口中存在的IPv4或IPv6地址。


QHostAddress netmask() const

返回与IP地址相关联的子网掩码。子网掩码是一个IP地址的形式表示,如255.255.0.0。

对于IPv6地址,前缀长度被转换成一个地址,其中设置为1的位数等于前缀长度。前缀长度为64位(最常见的值),子网掩码将被表示为一个地址为FFFF:FFFF:FFFF:FFFF::的QHostAddress。


int prefixLength() const

返回此IP地址的前缀长度。前缀长度和子网掩码中设置为1的位数相匹配。IPv4地址的值在0 - 32之间。IPv6地址的值在0 - 128之间,是表示数据的首选。

如果前缀长度不能确定,则返回0(即:netmask()返回一个空的QHostAddress())。

例如:

255.255.240.0 转换为二进制:11111111 11111111 11110000 00000000,那么前缀长度就是8*2 + 4 = 20(1的个数)。

ffff:ffff:ffff:ffff:: 转换为二进制:1111111111111111 1111111111111111 1111111111111111 1111111111111111,那么前缀长度就是16*4 = 64(1的个数)。

使用

QNetworkInterface类中提供了一个便利的静态函数allInterfaces(),用于返回所有的网络接口。

QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
foreach (QNetworkInterface netInterface, list) {
    QList<QNetworkAddressEntry> entryList = netInterface.addressEntries();
    foreach(QNetworkAddressEntry entry, entryList) {  // 遍历每一个IP地址
        qDebug() << "********************";
        qDebug() << "IP Address:" << entry.ip().toString();  // IP地址
        qDebug() << "Netmask:" << entry.netmask().toString();  // 子网掩码
        qDebug() << "Broadcast:" << entry.broadcast().toString();  // 广播地址
        qDebug() << "Prefix Length:" << entry.prefixLength();  // 前缀长度
    }
}

通过遍历每一个网络接口QNetworkInterface,根据其addressEntries()函数,我们可以很容易的获取到所有的QNetworkAddressEntry,然后通过ip()、netmask()、broadcast()函数获取对应的IP地址、子网掩码以及广播地址。

输出如下:


IP Address: “fe80::550c:ab19:fb48:1c9%15”
Netmask: “ffff:ffff:ffff:ffff::”
Broadcast: “”
Prefix Length: 64


IP Address: “169.254.1.201”
Netmask: “”
Broadcast: “”
Prefix Length: -1


IP Address: “fe80::d086:8566:6065:8954%11”
Netmask: “ffff:ffff:ffff:ffff::”
Broadcast: “”
Prefix Length: 64


IP Address: “172.18.4.165”
Netmask: “255.255.240.0”
Broadcast: “172.18.15.255”
Prefix Length: 20


IP Address: “fe80::f864:a962:7219:f98e%16”
Netmask: “ffff:ffff:ffff:ffff::”
Broadcast: “”
Prefix Length: 64


IP Address: “192.168.17.1”
Netmask: “255.255.255.0”
Broadcast: “192.168.17.255”
Prefix Length: 24


IP Address: “fe80::8169:691f:148e:d3cb%17”
Netmask: “ffff:ffff:ffff:ffff::”
Broadcast: “”
Prefix Length: 64


IP Address: “192.168.178.1”
Netmask: “255.255.255.0”
Broadcast: “192.168.178.255”
Prefix Length: 24


IP Address: “fe80::5996:27a3:83b5:2ae7%18”
Netmask: “ffff:ffff:ffff:ffff::”
Broadcast: “”
Prefix Length: 64


IP Address: “192.168.56.1”
Netmask: “255.255.255.0”
Broadcast: “192.168.56.255”
Prefix Length: 24


IP Address: “::1”
Netmask: “ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff”
Broadcast: “”
Prefix Length: 128


IP Address: “127.0.0.1”
Netmask: “”
Broadcast: “”
Prefix Length: -1

更多参考

目录
相关文章
|
7月前
|
存储 编译器 C++
QT之QFlags详解
QT之QFlags详解
223 0
|
Linux 调度 数据安全/隐私保护
Qt之QFtp
简述 QFtp 类提供了一个 FTP 协议的客户端实现。 该类提供了一个到 FTP 的直接接口,允许对请求有更多的控制。但是,对于新的应用程序,建议使用 QNetworkAccessManager 和 QNetworkReply,因为这些类拥有一个更简单、还更强大的 API。 简述 QFtp 工作流程 基本使用 连接并登录 FTP 服务器 切换工作目录 列出目
7162 1
26 QT - 事件过滤器
26 QT - 事件过滤器
54 0
|
存储
Qt之QLCDNumber
Qt之QLCDNumber
379 0
Qt之QImageReader
简述 QImageReader类为从文件或设备读取图像提供了一个独立的接口。 读取图像最常用的方法是通过构造QImage和QPixmap,或通过调用QImage::load()和QPixmap::load()。QImageReader是一个专业读取图像的类,可以有更多的控制,例如,可以通过调用setScaledSize()读取图像成特定的大小,通过调用setClipRec
2622 0
|
算法
Qt之QTimeLine
简述 QTimeLine 类提供了用于控制动画的时间轴,通常用于通过定期调用一个槽函数来动画一个 GUI 控件。 相信了解动画的人对帧应该不陌生,可以把一个动画想象成由很多张静态画面组成,而每一个画面就是一帧图像。每隔一定时间间隔就显示一帧图像,当该间隔较短时,人眼就感觉不出来了,觉得看到的是连续的影像。 简述 详细说明 状态 方向 曲线形状 详细
2285 0
|
安全 并行计算
Qt之QFutureWatcher
简述 QFuture 表示异步计算的结果,QFutureWatcher 则允许使用信号和槽监视 QFuture,也就是说,QFutureWatcher 是为 QFuture 而生的。 简述 详细描述 基本使用 更多参考 详细描述 QFutureWatcher 提供了有关 QFuture 的信息和通知,使用 setFuture() 函数开始监视一个特
3723 0