下面我们就讲解如何获取自己电脑的IP地址以及其他网络信息,我们会涉及到网络模块(QtNetworkModule)中的QHostInfo,QHostAddress,QNetworkInterface和QNetworkAddressEntry等几个类。
pro 文件
一、使用QHostInfo获取主机名和IP地址
//主机名称
QString lostHostName=QHostInfo::localHostName();
qDebug()<<"计算机主机名称=="<<lostHostName;
//ip地址
QHostInfo ipInfo=QHostInfo::fromName(lostHostName);
qDebug()<<"计算机主机IP=="<<ipInfo.addresses();
//便历出所有的地址
foreach(QHostAddress address,ipInfo.addresses())
{
if(address.protocol() == QAbstractSocket::IPv4Protocol)
qDebug() << address.toString();
}
因为IP地址由QHostAddress 类来管理,所以我们可以使用该类来获取一条IP地址,然后使用该类的***protocol()***函数来判断其是否为IPv4地址。如果是IPv6地址,可以使用QAbstractSocket::IPv6Protocol来判断。
QHostInfo 出了上面获取本机地址还可以根据地址和Id获得上传的信息
QHostInfo::lookupHost()
QHostInfo::lookupId();
二、通过QNetworkInterface类来获取本机的IP地址和网络接口信息
***QNetworkInterface***类提供了程序所运行时的主机的IP地址和网络接口信息的列表。在每一个网络接口信息中都包含了0个或多个IP地址,而每一个IP地址又包含了和它相关的子网掩码和广播地址,它们三者被封装在一个QNetworkAddressEntry对象中。网络接口信息中也提供了硬件地址信息。
//获取所有网络接口的列表
//获取所有网络接口的列表
QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
foreach(QNetworkInterface interface,list) //遍历每一个网络接口
{
qDebug() << "设备 Device: "<<interface.name(); //设备名
//硬件地址
qDebug() << "首地址 HardwareAddress: "<<interface.hardwareAddress();
//获取IP地址条目列表,每个条目中包含一个IP地址,
//一个子网掩码和一个广播地址
QList<QNetworkAddressEntry> entryList= interface.addressEntries();
foreach(QNetworkAddressEntry entry,entryList)//遍历每个IP地址条目
{
qDebug()<<"IP Address: "<<entry.ip().toString(); //IP地址
qDebug()<<"Netmask: "<<entry.netmask().toString(); //子网掩码
qDebug()<<"Broadcast: "<<entry.broadcast().toString();//广播地址
}
}