Qt网络编程之获取主机信息

本文深入探讨了Qt中网络编程的两个关键类QHostInfo和QNetworkInterface的使用方法。介绍了如何利用QHostInfo获取主机名、DNS域名及主机信息,以及如何通过QNetworkInterface获取网络接口信息,包括IP地址、子网掩码和广播地址。

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();//广播地址

     }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值