1. 将主机名解析为IP地址
QHostInfo 用于主机名的查找,它提供了两个便捷的静态函数
fromName():会阻塞并返回一个QHostInfo对象
QHostInfo info = QHostInfo::fromName("www.baidu.com");
qDebug() << "Ip:" << info.addresses();
loopupHost():异步进行,每当找到一个主机时,都会发射信号QHostAddress address;//输出找到的IP地址
foreach (address, info.addresses()) {qDebug() << address;if (address.protocol() == QAbstractSocket::IPv4Protocol)qDebug() << address.toString();}
它需要制定一个主机名,一个QObject指针和一个槽。可以执行名称查找,当完成后悔调用制定的QObject对象的槽,查找工作是在其他线程完成的。是异步的。
头文件中声明私有槽
private slots:
void lookedUp(const QHostInfo &host);
QHostInfo::lookupHost("www.baidu.com",this,SLOT(lookedUp(QHostInfo)));//
void MainWindow::lookedUp(const QHostInfo &host)
{
if (host.error() != QHostInfo::NoError) {
qDebug() << "lookup failed:" << host.errorString() ;
return;
}
foreach (const QHostAddress &address, host.addresses()) {
qDebug() << " found address:" << address.toString() << host.hostName();
}
}
2. 获取接口列表
QNetworkInterface 类来获取主机的IP地址列表和网络接口信息
//获取所有网络接口的列表
QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
foreach(QNetworkInterface interface, list) {
//接口名称
qDebug() << "Name:" << interface.name();
//硬件地址
qDebug() << "hardwareAddress:" << interface.hardwareAddress();
//获取IP地址条目列表,每个条目包含一个IP地址,一个子网掩码和广播地址
QList<QNetworkAddressEntry> entryList = interface.addressEntries();
//遍历每一个IP地址条目
foreach (QNetworkAddressEntry entry, entryList) {
//IP地址
qDebug() << "IP address:" << entry.ip().toString();
qDebug() << "netmask:" << entry.netmask().toString();
qDebug() << "Broadcast:" << entry.broadcast().toString();
}
}