1. 程式人生 > 其它 >qt之QHostAddress學習

qt之QHostAddress學習

技術標籤:qt

理論

  • QHostAddress類提供了一個IP地址資訊。這個類可以提供與平臺無關的,支援IPv4和IPv6的IP地址資訊。
  • QHostAddress通常都與QTcpSocket, QTcpServer和QUdpSocket一起配合使用,它可以用來輔助連線一個主機,或者輔助啟動一個伺服器。
  • setAddress()可以指定QHostAdress的IP地址。toIPv4Address(), toIPv6Address(), 或者toString()可以獲取IP地址值。protocol()可以用來檢查協議的型別。

注意:QHostAddress不用於DNS查詢,QHostInfo可以用於DNS查詢。

這個類支援以下預定義的地址:Null, LocalHost, LocalHostIPv6, Broadcast, and Any.

官方文件
官方文件

實踐

  1. 建立一個工程

在這裡插入圖片描述

在這裡插入圖片描述

  1. 引入network模組

在netstat.pro中加上網路模組

在這裡插入圖片描述

#include <QCoreApplication>
#include <QDebug>
#include <QHostAddress>
#include <QNetworkInterface>

#define qcout qDebug()

int main(int argc, char *argv[
]) { QCoreApplication a(argc, argv); QHostAddress address = QHostAddress(QHostAddress::LocalHost); QString strIPAddress = address.toString(); qcout << strIPAddress; // "127.0.0.1" QHostAddress ad01; ad01.setAddress("127.0.0.2"
); // "127.0.0.2" qcout << ad01.toString(); // 返回主機上面的所有IP地址 QList<QHostAddress> list = QNetworkInterface::allAddresses(); foreach (QHostAddress address, list){ // 主機地址為空 if (address.isNull()) continue; qcout << "********************"; QAbstractSocket::NetworkLayerProtocol nProtocol = address.protocol(); QString strScopeId = address.scopeId(); QString strAddress = address.toString(); bool bLoopback = address.isLoopback(); qcout << "Protocol : " << nProtocol; // QAbstractSocket::NetworkLayerProtocol(IPv4Protocol) qcout << "ScopeId : " << strScopeId; // "" qcout << "Address : " << strAddress; // "223.3.81.245" qcout << "IsLoopback : " << bLoopback; // false // 如果是IPv4 if (nProtocol == QAbstractSocket::IPv4Protocol) { bool bOk = false; quint32 nIPV4 = address.toIPv4Address(&bOk); if (bOk) qcout << "IPV4 : " << nIPV4; } // 如果是IPv6 else if (nProtocol == QAbstractSocket::IPv6Protocol) { QStringList IPV6List(""); Q_IPV6ADDR IPV6 = address.toIPv6Address(); for (int i = 0; i < 16; ++i) { quint8 nC = IPV6[i]; IPV6List << QString::number(nC); } qcout << "IPV6 : " << IPV6List.join(" "); } } return a.exec(); }