问题描述:
在QT中访问主机IP,为何只获得了127.0.0.1虚拟IP地址,无法理解~~~
学习背景
QT中访问主机IP地址主要使用两个类:QHostInfo与QNetworkInterface类
1.QHostInfo类访问主机IP地址代码:
QString hostName=QHostInfo::localHostName();//主机信息查询:返回本机主机名
//测试
//qDebug()<< "本地DNS域名:"<<hostName<<"\n";//hostName="localhost.localdomain"主机名称
QHostInfo hostInfo=QHostInfo::fromName(hostName);//通过主机名称,获取IP地址,返回一个hostInfo类
QString localIP="";//本地IP地址string数组
QList<QHostAddress> addList=hostInfo.addresses();//创建一个QList对象,容器内部存储QHostAddress类型的数据,返回一个address数组,QHostAddress类提供一个IP地址的信息,包括IPv4和Ipv
//返回一个与hostname关联的IP地址列表,该列表可能为空
//测试
//qDebug()<<hostInfo.addresses();
//测试
//for (int i=0;i<addList.count();i++)
//{
//qDebug()<<addList.at(i);
//}
//返回的address是QHostAddress类的列表,QHostAddress类提供一个IP地址的信息,包括IPv4和IPv6地址
if (!addList.isEmpty())
{
for (int i=0;i<addList.count();i++)
{
QHostAddress aHost=addList.at(i);//访问指定位置的元素
//测试
//qDebug()<<aHost.toString();
if (QAbstractSocket::IPv4Protocol==aHost.protocol()) //protocol()返回IP地址的协议类型,并且只返回IPv4的地址
{
localIP=aHost.toString();//返回IP地址的字符串
break;
}
}
}
注:此方法在默认情况下返回的IP地址为127.0.0.1,此地址为虚拟地址(本地环回地址),即只能通过TCP与本机通信。(原因是:在虚拟机中默认域名是localhost,localhost默认的IP地址为127.0.0.1、::1),如下图所示为localhost.localdomain文件配置,默认的IP地址
2.QNetworkInterface类访问主机IP地址代码<Qnetwork>:
QList<QNetworkInterface> list=QNetworkInterface::allInterfaces();//获取网络接口
for(int i=0;i<list.count();i++)
{
QNetworkInterface aInterface=list.at(i);
qDebug()<<"设备名称:"<<aInterface.humanReadableName(); //显示每个接口的设备名称
qDebug()<<"硬件地址:"<<aInterface.hardwareAddress(); //显示每个接口的硬件地址
QList<QNetworkAddressEntry> entryList=aInterface.addressEntries();
for(int j=0;j<entryList.count();j++)
{
QNetworkAddressEntry aEntry=entryList.at(j);
qDebug()<<"IP地址:"+aEntry.ip().toString();
}
}
Lo表示环回接口;
Ens33表示以太网卡
Virbr0表示虚拟网桥网卡
因此,本虚拟机的IP地址应该为192.168.88.139