1 QHostInfo类
QHostInfo类用于获取主机的一些网络信息。
QHostInfo类有下面这些公有函数:
[static] QString QHostInfo::localHostName();
[static] QHostInfo QHostInfo::fromName(const QString &name);
[static] QString QHostInfo::localDomainName();
[static] int QHostInfo::lookupHost(const QString &name, QObject *receiver, const char *member);
localHostName函数获取本机主机名。
fromName函数根据主机名获取主机的信息。
localDomainName函数返回本机DNS域名。
lookupHost以异步方式查找主机的IP地址,并返回一个表示本次查找的ID。name参数表示主机名,可以为主机名、域名或IP地址。参数receiver指定槽函数的接收者,member指定槽函数的名称。异步方式表示执行lookupHost后,程序可能需要花一定时间用来查找,但不阻塞程序的继续执行(类似多线程???),查找完毕后,通过信号通知设定的槽函数,在槽函数里读取查找的结果。
#include <QHostInfo>
QString hostName = QHostInfo::localHostName();//获取本机主机名
QHostInfo hostInfo = QHostInfo::fromName(hostName);//获取本机信息
QList<QHostAddress> addList=hostInfo.addresses();//获取IP地址列表
if (!addList.isEmpty())
for(int i=0;i<addList.count();i++)
{
QHostAddress aHost=addList.at(i); //每一项是一个QHostAddress
QAbstractSocket::NetworkLayerProtocol protocol = aHost.protocol();//返回协议类型
QString protocolType;
switch(protocol)
{
case QAbstractSocket::IPv4Protocol:
protocolType = "IPv4 Protocol";
break;
case QAbstractSocket::IPv6Protocol:
protocolType = "IPv6 Protocol";
break;
case QAbstractSocket::AnyIPProtocol:
protocolType = "Any IP Protocol";
default:
protocolType = "Unknown Network Layer Protocol";
}
QString IPAddress = aHost.toString();//返回IP地址的字符串
}
//用lookupHost根据主机名、域名或IP地址查找主机相关信息
QString hostname=ui->editHost->text(); //获取主机名
//查找主机名为hostname的主机信息,查找完毕后执行this对象的槽函数lookedUpHostInfo(QHostInfo)
QHostInfo::lookupHost(hostname,this,SLOT(lookedUpHostInfo(QHostInfo)));
//槽函数部分代码
void Dialog::lookedUpHostInfo(const QHostInfo &host)
{
QList<QHostAddress> addList=host.addresses();//获取IP地址列表
/******************/
}
2 QNetworkInterface类
QNetworkInterface类用于获取主机的网络接口信息,如IP地址、子网掩码或广播地址。
QNetworkInterface类有下面这些公有函数:
[static] QList<QHostAddress> QNetworkInterface::allAddresses();
[static] QList<QNetworkInterface> QNetworkInterface::allInterfaces();
QList<QNetworkAddressEntry> QNetworkInterface::addressEntries() const;
allAddresses函数返回主机上查询到的所有IP地址列表。
allInterfaces函数返回主机上查询到的所有网络接口列表。
addressEntries函数返回网络接口(包括子网掩码和广播地址,IP地址)列表。
QList<QHostAddress> addList=QNetworkInterface::allAddresses();//获取主机IP地址列表
/***************************/
QList<QNetworkInterface> list=QNetworkInterface::allInterfaces();
for(int i = 0;i < list.count();i++)
{
QNetworkInterface aInterface = list.at(i);
if (!aInterface.isValid())//接口信息是否有效
continue;
QString deviceName = aInterface.humanReadableName();//设备名称
QString hardwareAdd = aInterface.hardwareAddress();//硬件地址
QList<QNetworkAddressEntry> entryList=aInterface.addressEntries();
for(int j = 0;j < entryList.count();j++)
{
QNetworkAddressEntry aEntry=entryList.at(j);
QString IPAddress = aEntry.ip().toString();//IP 地址
QString mask = aEntry.netmask().toString();//子网掩码
QString boardcastAddress = aEntry.broadcast().toString();//广播地址
}
}
本文深入探讨了Qt中网络编程的两个关键类QHostInfo和QNetworkInterface的使用方法。介绍了如何利用QHostInfo获取主机名、DNS域名及主机信息,以及如何通过QNetworkInterface获取网络接口信息,包括IP地址、子网掩码和广播地址。

4504

被折叠的 条评论
为什么被折叠?



