qt之QHostAddress學習
阿新 • • 發佈:2020-12-13
技術標籤: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.
實踐
- 建立一個工程
- 引入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();
}