日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt之QNetworkInterface

發布時間:2023/11/29 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt之QNetworkInterface 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡述

QNetworkInterface類負責提供主機的IP地址和網絡接口的列表。

QNetworkInterface表示了當前程序正在運行時與主機綁定的一個網絡接口。每個網絡接口可能包含0個或多個IP地址,每個IP地址都可選擇性地與一個子網掩碼和/或一個廣播地址相關聯。這樣的列表可以通過addressEntries()方法獲得。當子網掩碼或者廣播地址不必要時,可以使用allAddresses()便捷函數來僅僅獲得IP地址。

QNetworkInterface使用hardwareAddress()方法獲取接口的硬件地址。

不是所有的操作系統都支持這些所有的特性。只有IPv4地址可以保證在所有平臺上都能被這個類列舉出來,尤其是IPv6地址的列舉目前只支持Windows XP及相關版本、Linux、MacOS和BSDs。

?

  • 簡述
  • 常用接口
  • 獲取所有IP地址
  • 獲取網絡接口列表
  • 更多參考

?

常用接口

枚舉 QNetworkInterface::InterfaceFlag?
標識 QNetworkInterface::InterfaceFlags

指定網絡接口相關的標識,可能的值:

常量值描述
QNetworkInterface::IsUp0x1網絡接口處于活動狀態
QNetworkInterface::IsRunning0x2網絡接口已分配資源
QNetworkInterface::CanBroadcast0x4網絡接口工作在廣播模式
QNetworkInterface::IsLoopBack0x8網絡接口是環回接口:也就是說,它是一個虛擬接口,其目的是主機本身
QNetworkInterface::IsPointToPoint0x10網絡接口是一個點對點接口:也就是說,有一個,單一的其他地址可以直接由它到達。
QNetworkInterface::CanMulticast0x20網絡接口支持多播

?

注意:一個網絡接口不能既是broadcast-based又是point-to-point。

InterfaceFlags類型是一個QFlags類型定義,它存儲一個或InterfaceFlag的組合值。

?

QList<QHostAddress> allAddresses() [static]

這個便利函數返回主機上面發現的所有IP地址。相當于allInterfaces()返回的所有對象調用addressEntries()來獲取QHostAddress對象列表,然后對每一個對象調用QHostAddress::ip()方法。

?

QList<QNetworkInterface> allInterfaces() [static]

返回的主機上找到的所有的網絡接口的列表。在失敗情況下,它會返回一個空列表。

?

QList<QNetworkAddressEntry> addressEntries() const

返回IP地址列表,這個接口具備連同與其相關的網絡掩碼和廣播地址。

如果不需要子網掩碼或廣播地址的信息,可以調用allAddresses()函數來只獲取IP地址。

?

InterfaceFlags flags() const

返回與此網絡接口關聯的標志。

?

QString hardwareAddress() const

返回此接口的底層硬件地址。在以太網接口上,這將是表示MAC地址的字符串,用冒號分隔。

其他接口類型可能有硬件地址的其他類型。不應該依賴于實現這個函數返回一個有效的MAC地址。

?

QString humanReadableName() const

如果名稱可確定,在Windows上,返回網絡接口的人類可讀的名稱,例如:“本地連接”;如果不能,這個函數返回值與name()相同。用戶可以在Windows控制面板中修改人類可讀的名稱,因此它可以在程序的執行過程中變化的名稱。

在Unix上,此函數目前返回值總是和name()相同,因為Unix系統不存儲人類可讀的名稱的配置。

?

bool isValid() const

如果此QNetworkInterface對象包含一個的有效的網絡接口,則返回true。

?

QString QNetworkInterface::name() const

返回網絡接口的名稱。在Unix系統中,這是一個包含接口的類型和任選的序列號的字符串,例如:“eth0”、“lo”或者“pcn0”;在Windows中,這是一個內部ID,用戶不能更改。

獲取所有IP地址

通過調用便利的靜態函數allAddresses(),可以返回一個QHostAddress地址列表(只能獲取IP地址,沒有子網掩碼和廣播地址的信息)。

QList<QHostAddress> list = QNetworkInterface::allAddresses(); foreach (QHostAddress address, list) {if (!address.isNull())qDebug() << "Address : " << address.toString(); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

輸出如下:

Address : “fe80::550c:ab19:fb48:1c9%15”?
Address : “169.254.1.201”?
Address : “fe80::d086:8566:6065:8954%11”?
Address : “172.18.4.165”?
Address : “fe80::f864:a962:7219:f98e%16”?
Address : “192.168.17.1”?
Address : “fe80::8169:691f:148e:d3cb%17”?
Address : “192.168.178.1”?
Address : “fe80::5996:27a3:83b5:2ae7%18”?
Address : “192.168.56.1”?
Address : “::1”?
Address : “127.0.0.1”

QHostAddress類提供一個IP地址,更多參考:Qt之QHostAddress

獲取網絡接口列表

通過調用便利的靜態函數allInterfaces(),可以返回一個QNetworkInterface網絡接口列表(通過QNetworkAddressEntry,可以獲取IP地址、子網掩碼和廣播地址等信息)。

QList<QNetworkInterface> list = QNetworkInterface::allInterfaces(); foreach (QNetworkInterface netInterface, list) {if (!netInterface.isValid())continue;qDebug() << "********************";QNetworkInterface::InterfaceFlags flags = netInterface.flags();if (flags.testFlag(QNetworkInterface::IsRunning)&& !flags.testFlag(QNetworkInterface::IsLoopBack)) { // 網絡接口處于活動狀態qDebug() << "Device : " << netInterface.name(); // 設備名qDebug() << "HardwareAddress : " << netInterface.hardwareAddress(); // 硬件地址qDebug() << "Human Readable Name : " << netInterface.humanReadableName(); // 人類可讀的名字}// QList<QNetworkAddressEntry> entryList = netInterface.addressEntries();// foreach(QNetworkAddressEntry entry, entryList) { // 遍歷每一個IP地址// qDebug() << "IP Address:" << entry.ip().toString(); // IP地址// qDebug() << "Netmask:" << entry.netmask().toString(); // 子網掩碼// qDebug() << "Broadcast:" << entry.broadcast().toString(); // 廣播地址//} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

通過flags()函數,可以獲取到當前網絡接口的標識,利用testFlag()進行過濾,就可以獲取我們想要的內容(設備名、硬件地址、名字)。

注意:為了簡單,我注釋掉了IP地址的信息,需要的可以自行測試。

QNetworkAddressEntry類存儲了一個IP地址,子網掩碼和廣播地址。更多參考:Qt之QNetworkAddressEntry

輸出如下:

?


?

Device : “{BE9972CD-860E-4E15-8CE2-3F25EF0A7A24}”?
HardwareAddress : “94:DE:80:21:92:17”?
Human Readable Name : “本地連接”


Device : “{29F85058-E757-4F60-BF7B-47F6227C8CBC}”?
HardwareAddress : “00:50:56:C0:00:01”?
Human Readable Name : “VMware Network Adapter VMnet1”


Device : “{A297491C-D43C-4F85-A674-88368F8D4FC1}”?
HardwareAddress : “00:50:56:C0:00:08”?
Human Readable Name : “VMware Network Adapter VMnet8”


Device : “{1AE5F6FC-478A-4EAB-B4D2-86201A6B2090}”?
HardwareAddress : “0A:00:27:00:00:12”?
Human Readable Name : “VirtualBox Host-Only Network”

更多參考

  • Qt之網絡編程
  • Qt之QHostInfo
  • Qt之QHostAddress
  • Qt之QNetworkAddressEntry

轉自:http://blog.csdn.net/liang19890820/article/details/50775052

簡述

QNetworkInterface類負責提供主機的IP地址和網絡接口的列表。

QNetworkInterface表示了當前程序正在運行時與主機綁定的一個網絡接口。每個網絡接口可能包含0個或多個IP地址,每個IP地址都可選擇性地與一個子網掩碼和/或一個廣播地址相關聯。這樣的列表可以通過addressEntries()方法獲得。當子網掩碼或者廣播地址不必要時,可以使用allAddresses()便捷函數來僅僅獲得IP地址。

QNetworkInterface使用hardwareAddress()方法獲取接口的硬件地址。

不是所有的操作系統都支持這些所有的特性。只有IPv4地址可以保證在所有平臺上都能被這個類列舉出來,尤其是IPv6地址的列舉目前只支持Windows XP及相關版本、Linux、MacOS和BSDs。

?

  • 簡述
  • 常用接口
  • 獲取所有IP地址
  • 獲取網絡接口列表
  • 更多參考

?

常用接口

枚舉 QNetworkInterface::InterfaceFlag?
標識 QNetworkInterface::InterfaceFlags

指定網絡接口相關的標識,可能的值:

常量值描述
QNetworkInterface::IsUp0x1網絡接口處于活動狀態
QNetworkInterface::IsRunning0x2網絡接口已分配資源
QNetworkInterface::CanBroadcast0x4網絡接口工作在廣播模式
QNetworkInterface::IsLoopBack0x8網絡接口是環回接口:也就是說,它是一個虛擬接口,其目的是主機本身
QNetworkInterface::IsPointToPoint0x10網絡接口是一個點對點接口:也就是說,有一個,單一的其他地址可以直接由它到達。
QNetworkInterface::CanMulticast0x20網絡接口支持多播

?

注意:一個網絡接口不能既是broadcast-based又是point-to-point。

InterfaceFlags類型是一個QFlags類型定義,它存儲一個或InterfaceFlag的組合值。

?

QList<QHostAddress> allAddresses() [static]

這個便利函數返回主機上面發現的所有IP地址。相當于allInterfaces()返回的所有對象調用addressEntries()來獲取QHostAddress對象列表,然后對每一個對象調用QHostAddress::ip()方法。

?

QList<QNetworkInterface> allInterfaces() [static]

返回的主機上找到的所有的網絡接口的列表。在失敗情況下,它會返回一個空列表。

?

QList<QNetworkAddressEntry> addressEntries() const

返回IP地址列表,這個接口具備連同與其相關的網絡掩碼和廣播地址。

如果不需要子網掩碼或廣播地址的信息,可以調用allAddresses()函數來只獲取IP地址。

?

InterfaceFlags flags() const

返回與此網絡接口關聯的標志。

?

QString hardwareAddress() const

返回此接口的底層硬件地址。在以太網接口上,這將是表示MAC地址的字符串,用冒號分隔。

其他接口類型可能有硬件地址的其他類型。不應該依賴于實現這個函數返回一個有效的MAC地址。

?

QString humanReadableName() const

如果名稱可確定,在Windows上,返回網絡接口的人類可讀的名稱,例如:“本地連接”;如果不能,這個函數返回值與name()相同。用戶可以在Windows控制面板中修改人類可讀的名稱,因此它可以在程序的執行過程中變化的名稱。

在Unix上,此函數目前返回值總是和name()相同,因為Unix系統不存儲人類可讀的名稱的配置。

?

bool isValid() const

如果此QNetworkInterface對象包含一個的有效的網絡接口,則返回true。

?

QString QNetworkInterface::name() const

返回網絡接口的名稱。在Unix系統中,這是一個包含接口的類型和任選的序列號的字符串,例如:“eth0”、“lo”或者“pcn0”;在Windows中,這是一個內部ID,用戶不能更改。

獲取所有IP地址

通過調用便利的靜態函數allAddresses(),可以返回一個QHostAddress地址列表(只能獲取IP地址,沒有子網掩碼和廣播地址的信息)。

QList<QHostAddress> list = QNetworkInterface::allAddresses(); foreach (QHostAddress address, list) {if (!address.isNull())qDebug() << "Address : " << address.toString(); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

輸出如下:

Address : “fe80::550c:ab19:fb48:1c9%15”?
Address : “169.254.1.201”?
Address : “fe80::d086:8566:6065:8954%11”?
Address : “172.18.4.165”?
Address : “fe80::f864:a962:7219:f98e%16”?
Address : “192.168.17.1”?
Address : “fe80::8169:691f:148e:d3cb%17”?
Address : “192.168.178.1”?
Address : “fe80::5996:27a3:83b5:2ae7%18”?
Address : “192.168.56.1”?
Address : “::1”?
Address : “127.0.0.1”

QHostAddress類提供一個IP地址,更多參考:Qt之QHostAddress

獲取網絡接口列表

通過調用便利的靜態函數allInterfaces(),可以返回一個QNetworkInterface網絡接口列表(通過QNetworkAddressEntry,可以獲取IP地址、子網掩碼和廣播地址等信息)。

QList<QNetworkInterface> list = QNetworkInterface::allInterfaces(); foreach (QNetworkInterface netInterface, list) {if (!netInterface.isValid())continue;qDebug() << "********************";QNetworkInterface::InterfaceFlags flags = netInterface.flags();if (flags.testFlag(QNetworkInterface::IsRunning)&& !flags.testFlag(QNetworkInterface::IsLoopBack)) { // 網絡接口處于活動狀態qDebug() << "Device : " << netInterface.name(); // 設備名qDebug() << "HardwareAddress : " << netInterface.hardwareAddress(); // 硬件地址qDebug() << "Human Readable Name : " << netInterface.humanReadableName(); // 人類可讀的名字}// QList<QNetworkAddressEntry> entryList = netInterface.addressEntries();// foreach(QNetworkAddressEntry entry, entryList) { // 遍歷每一個IP地址// qDebug() << "IP Address:" << entry.ip().toString(); // IP地址// qDebug() << "Netmask:" << entry.netmask().toString(); // 子網掩碼// qDebug() << "Broadcast:" << entry.broadcast().toString(); // 廣播地址//} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

通過flags()函數,可以獲取到當前網絡接口的標識,利用testFlag()進行過濾,就可以獲取我們想要的內容(設備名、硬件地址、名字)。

注意:為了簡單,我注釋掉了IP地址的信息,需要的可以自行測試。

QNetworkAddressEntry類存儲了一個IP地址,子網掩碼和廣播地址。更多參考:Qt之QNetworkAddressEntry

輸出如下:

?


?

Device : “{BE9972CD-860E-4E15-8CE2-3F25EF0A7A24}”?
HardwareAddress : “94:DE:80:21:92:17”?
Human Readable Name : “本地連接”


Device : “{29F85058-E757-4F60-BF7B-47F6227C8CBC}”?
HardwareAddress : “00:50:56:C0:00:01”?
Human Readable Name : “VMware Network Adapter VMnet1”


Device : “{A297491C-D43C-4F85-A674-88368F8D4FC1}”?
HardwareAddress : “00:50:56:C0:00:08”?
Human Readable Name : “VMware Network Adapter VMnet8”


Device : “{1AE5F6FC-478A-4EAB-B4D2-86201A6B2090}”?
HardwareAddress : “0A:00:27:00:00:12”?
Human Readable Name : “VirtualBox Host-Only Network”

更多參考

  • Qt之網絡編程
  • Qt之QHostInfo
  • Qt之QHostAddress
  • Qt之QNetworkAddressEntry

總結

以上是生活随笔為你收集整理的Qt之QNetworkInterface的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。