QNetworkInterface localInterface =localInterface.interfaceFromName("设备名称 例如 eth0");
QString MAC =localInterface.hardwareAddress()/* "90:FB:A6:11:52:63"*/;
int localNetmask = 0xFFFFFF00;
int localIP ;
for(int i =0; i < localInterface.addressEntries().size(); i ++)
{
if( !localInterface.addressEntries().at(i).ip().isNull() &&localInterface.addressEntries().at(i).ip().protocol()==QAbstractSocket::IPv4Protocol)
{
localIP = localInterface.addressEntries().at(i).ip().toIPv4Address();
localNetmask = localInterface.addressEntries().at(i).netmask().toIPv4Address();
break;
}
}
以上方法貌似某些情况下也不好使,可以试试下面的方法:
QString localHostName=QHostInfo::localHostName();
QHostInfo hostInfo=QHostInfo::fromName(localHostName);
QList<QHostAddress>listAddress=hostInfo.addresses();
for(int j = 0; j < listAddress.size(); j++)
{
if(!listAddress.at(j).isNull() && listAddress.at(j).protocol() == QAbstractSocket::IPv4Protocol
&& listAddress.at(j) != QHostAddress::LocalHost)
{
emit this->sendMsg(listAddress.at(j).toString());
break;
}
}
获取本机有效IP地址、掩码、网关、MAC地址,一直以来我都没找到有效方法,以前用MFC时也是这样,真无语了...
再或者:
QList<QHostAddress>listAddress = QNetworkInterface::allAddresses(); for(int j = 0; j < listAddress.size(); j++) { if(!listAddress.at(j).isNull() && listAddress.at(j).protocol() == QAbstractSocket::IPv4Protocol && listAddress.at(j) != QHostAddress::LocalHost) { localIPAddress = listAddress.at(j).toString(); break; } } |