#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