这一节中,我们会涉及到网络模块(QtNetwork Module)中的QHostInfo ,QHostAddress ,QNetworkInterface和QNetworkAddressEntry等几个类。
#include <QApplication>
#include <QDebug>
#include <QtNetwork>
int main(int argc,char* argv[ ])
{
QApplication app(argc,argv);
//使用QHostInfo获取主机名与IP地址
//获取主机名
QString localHostName = QHostInfo::localHostName();
qDebug() << "localHostName" << localHostName;
//获取本机的IP地址(可能有多条)
QHostInfo info = QHostInfo::fromName(localHostName);
qDebug()<<"IP Address:"<< info.addresses();
//只输出IPv4地址(可能有多条)
foreach(QHostAddress address,info.addresses())
{
if(address.protocol() == QAbstractSocket::IPv4Protocol)
qDebug() <<"My localhost IPv4 address: "<< address.toString();
}
qDebug()<<"-------------------------------------------------------------------";
//通过QNetworkInterface类来获取本机的IP地址和网络接口信息
QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
//获取所有网络接口的列表
foreach(QNetworkInterface interface,list)
{
//遍历每一个网络接口
qDebug() << "Device: "<<interface.name();
//设备名
qDebug() << "HardwareAddress:"<<interface.hardwareAddress();
//硬件地址
QList<QNetworkAddressEntry> entryList = interface.addressEntries();
//获取IP地址条目列表,每个条目中包含一个IP地址,一个子网掩码和一个广播地址
foreach(QNetworkAddressEntry entry,entryList)
{
//遍历每一个IP地址条目
qDebug()<<"IP Address: "<<entry.ip().toString();
//子网掩码
qDebug()<<"Netmask: "<<entry.netmask().toString();
//广播地址
qDebug()<<"Broadcast: "<<entry.broadcast().toString();
qDebug()<<endl;
}
}
//如果我们只想利用QNetworkInterface类来获取IP地址,
//这个类提供了一个便捷的函数allAddresses()来获取IP地址
QString ad =QNetworkInterface::allAddresses().first().toString();
qDebug()<<"QNetworkInterface::allAddresses().first().toString()"<<ad;
return app.exec();
}
其实,以后最常用的还是其中获取IP地址的方法。我们以后可以利用一个函数来获取IP地址:
QString getIP() //获取ip地址
{
QList<QHostAddress> list =QNetworkInterface::allAddresses();
foreach (QHostAddress address, list)
{
if(address.protocol() ==QAbstractSocket::IPv4Protocol)
//我们使用IPv4地址
returnaddress.toString();
}
return 0;
}