Правильный способ поиска имен хостов в Qt с помощью QHostInfo или QDnsLookUp

Я пытаюсь использовать QHostInfo или же QDnsLookUp найти имя хоста и получить список QHostAddress. Я бы предпочел QHostInfo (интерфейс проще), но я попробовал также QDnsLookUp.

В первом случае я использую QHostInfo::lookupHost() статическая функция, а затем я получаю адреса из результата с QHostInfo::addresses()

Во втором случае я использую QDnsLookup::lookup()с типом, установленным на QDnsLookup::A (Записи адресов IPv4) и я получаю результаты с QDnsLookup::hostAddressRecords() (и я получаю значение QDnsHostAddressRecord элементы).

Хорошо, оба метода работают как-то, но я получаю только один результат... в обоих случаях это должен быть список результатов из документации... но мой список содержит только один элемент...

Есть ли какой-то вариант или что-то еще, что я должен установить, чтобы получить полный список? Что могло пойти не так?

2 ответа

Решение

С помощью Dig - Google Apps я узнал, что QDnsLookup::A вариант не был правильным решением. Я должен использовать QDnsLookup::ANY для того, чтобы иметь полный список.

Вам нужно сохранить результат в виде списка, несколько примеров:

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;
}
Другие вопросы по тегам