1

我正在尝试使用QHostInfoQDnsLookUp查找主机名并获取QHostAddress列表。我更喜欢QHostInfo(界面更简单),但我也尝试过QDnsLookUp

在第一种情况下,我使用QHostInfo::lookupHost()静态函数,然后从结果中获取地址QHostInfo::addresses()

在第二种情况下,我使用QDnsLookup::lookup(), 类型设置为QDnsLookup::A(IPv4 地址记录),我得到结果QDnsLookup::hostAddressRecords()(并且我得到QDnsHostAddressRecord元素的值)。

好吧,这两种方法都以某种方式起作用,但我只得到一个结果......在这两种情况下,它应该是文档中的结果列表......但我的列表只包含一个元素......

我应该设置一些选项或其他东西来获取完整列表吗?可能出了什么问题?

4

2 回答 2

0

您需要将结果存储在列表中,一些示例:

QString myClass::getBroadWiFiAddress()
{
    QString ipAddress;
    QNetworkInterface wifi;
    // Get WiFi interface
     QList<QNetworkInterface> interfceList = QNetworkInterface::allInterfaces();
     for (int i = 0; i < interfceList.size(); ++i)
     {

         if (interfceList.at(i).name().contains("wireless") && interfceList.at(0).isValid() && interfceList.at(i).IsUp)
         {
             //qDebug() << "Interfaces:" << i << interfceList.at(i).name() << " / " << interfceList.at(i).humanReadableName();
             wifi = interfceList.at(i);
            break;
         }

     }

    QList<QHostAddress> ipAddressesList = wifi.allAddresses();
    // use the first non-localhost IPv4 address
    for (int i = 0; i < ipAddressesList.size(); ++i) {
        if (ipAddressesList.at(i) != QHostAddress::LocalHost &&
            ipAddressesList.at(i).toIPv4Address() ) {
            ipAddress = ipAddressesList.at(i).toString();
            //qDebug() << "Using following IP Address:" << ipAddress;
            break;
        }
    }
    //qDebug() << "getBroadWiFiAddress" << ipAddress;
    return ipAddress;
}
于 2018-01-17T16:42:49.533 回答
0

在Dig - Google Apps的帮助下,我发现该QDnsLookup::A选项不是正确的解决方案。我必须使用QDnsLookup::ANY才能获得完整的列表。

于 2018-01-19T09:25:19.550 回答