QT獲取本地的主機網路資訊
- 2019 年 12 月 11 日
- 筆記
QHostInfo 類:查詢與特定主機名相關聯的主機的IP地址,或者與一個IP地址相關聯的主機名。
QHostAddress 類:提供一個IP地址,可提供獨立於平台和協議的方式來保存 IPv4和IPv6 地址。
QNetworkInterface 類:負責提供主機IP地址和網路介面的列表,表示了當前程式正在運行時與主機綁定的一個網路介面。
QNetworkAddressEntry 類:存儲了一個網路介面所支援的一個IP地址,同時還有與之相關的子網掩碼和廣播地址。
#include <QCoreApplication> #include <QHostInfo> #include <QNetworkInterface> #include <QString> void getHostInformation(); int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); getHostInformation(); return a.exec(); } void getHostInformation() { /***********************************************************/ //QHostInfo 提供一系列有關網路資訊的靜態函數,可獲取主機名、IP地址 QString localHostName = QHostInfo::localHostName(); // 獲取本機主機名 qDebug() << "主機名: " << localHostName; qDebug() << endl; /***********************************************************/ //根據主機名獲取相關主機資訊,包括IP地址。 QHostInfo hostInfo = QHostInfo::fromName(localHostName); QList<QHostAddress> addrList = hostInfo.addresses(); // 獲取本主機上的IP地址列表 qDebug() << "本主機上的IP地址列表,總計: " << addrList.count() ; /***********************************************************/ foreach (QHostAddress var, addrList) { qDebug() << var.toString(); //本機IP地址列表 } qDebug() << endl; /***********************************************************/ if(!addrList.isEmpty()) //獲得的主機IP地址列表可能為空。 { // 在不為空情況下使用第一個IP地址,可能IPv6,也可能IPv4 qDebug() << "first ip addr:" << addrList.first().toString(); } qDebug() << endl; /***********************************************************/ QString ipAddress; //QList<QHostAddress> addrList = QNetworkInterface::allAddresses(); //僅僅獲取IP地址列表 for (int i = 0; i < addrList.size(); ++i) { if (addrList.at(i) != QHostAddress::LocalHost && addrList.at(i).toIPv4Address()) { //是IPv4地址且非 QHostAddress::LocalHost ipAddress = addrList.at(i).toString(); qDebug() << "first ipv4 addr:" << ipAddress;// 在不為空情況下使用第一個IPv4地址 break; } } qDebug() << endl; /***********************************************************/ // 獲取本機的網路介面列表 QList<QNetworkInterface> ifaceList = QNetworkInterface::allInterfaces(); for (int i = 0; i < ifaceList.count(); i++){ QNetworkInterface var = ifaceList.at(i); qDebug() << QString("########## 設備%1 ############").arg(i); qDebug() << QString("介面名稱:") << var.humanReadableName(); qDebug() << QString("設備名稱:") << var.name(); qDebug() << QString("硬體地址:") << var.hardwareAddress(); /***********************************************************/ // 讀取一個IP地址的關聯資訊列表 QList<QNetworkAddressEntry> entryList = var.addressEntries(); //qDebug() << "IP地址的關聯資訊列表: "; //foreach(QNetworkAddressEntry entry, entryList){ //qDebug() << "IP: " << entry.ip().toString(); //qDebug() << "子網掩碼:" << entry.netmask().toString(); //qDebug() << "廣播地址:" << entry.broadcast().toString(); //} /***********************************************************/ // 讀取一個IPv4地址的關聯資訊列表 //qDebug() << "IPv4地址的關聯資訊列表: "; foreach(QNetworkAddressEntry ipv4entry, entryList){ if (ipv4entry.ip().toIPv4Address()) { qDebug() << "IP: " << ipv4entry.ip().toString(); qDebug() << "子網掩碼:" << ipv4entry.netmask().toString(); qDebug() << "廣播地址:" << ipv4entry.broadcast().toString(); } } } /***********************************************************/ }
版權聲明:源文來自CSDN,點擊這裡查看源文!