#include <qnetworkinterface.h>
QString GetLocalmachineIP()
{
QString ipAddress;
QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();
for(QHostAddress &addr : ipAddressesList)
{
// 找到不是本地ip,并且是ipv4协议,并且不是169开头的第一个地址
if(addr != QHostAddress::LocalHost && addr.protocol() == QAbstractSocket::IPv4Protocol && !addr.toString().startsWith("169"))
{
ipAddress = addr.toString();
break;
}
}
// if we did not find one, use IPv4 localhost
if (ipAddress.isEmpty())
ipAddress = QHostAddress(QHostAddress::LocalHost).toString();
return ipAddress;
}
QNetworkInterface::allAddresses() 里面获取的地址有包括ipv4和ipv6的,本地ip有127.0.0.1的,如果接到路由器的话,还有169.254.xx.xx的,169开头的是私有地址,没法使用,因此要去掉169开头的地址,比如我获取的本机地址有:
这里面就要获取出真正的ipv4的192.168.0.237这个地址,而不是一堆169开头的地址。使用上面的代码就可以获得。
要使用头文件#include <qnetworkinterface.h>,需要在qt工程加上QT += network