2016-05-10 20 views
0

Meine Anwendung verbindet sich mit einem TCP-Server. Ich möchte, dass es sich bewusst ist, dass es auf dem gleichen Host wie die Server-App läuft, so dass es den Serverprozess eventuell direkt hochfahren kann, wenn es nicht läuft.Qt feststellen, ob der angegebene Hostname auf localhost zeigt

Da der Server eine Schnittstelle überwacht und die Anwendung einen Hostnamen auflöst, um eine Verbindung zum Server herzustellen, ist es für mich nicht so offensichtlich festzustellen, ob der konfigurierte Hostname zum Verbinden des Servers mit demselben Host wie der Server verweist .

würde ich so etwas wie dies mag:

bool isThisLocalHost(QString hostName) { 
    //resolve hostname's address 
    //list localhost interfaces ip or hw addresses ? 
    //if the hostname address matches one of the host interfaces address 
    //pseudo code   
    bool bRes = interfaces_addresses_list.contains(hostname_address); 

    return bRes; 
} 

ich eigentlich zu erreichen dies mit QNetworkInterface versucht, QNetworkAddressEntry, QHostInfo, QHostAddress.

Vielleicht gibt es einen einfachen Weg?

+0

Es ist nicht ausreichend, um zu überprüfen, ob es ein localhost (127.x.x.x) ist, müssen Sie auch prüfen, ob es die Adresse von einem der lokalen Schnittstellen ist. –

+0

Ja, ich denke, meine Antwort funktioniert genauso wie deine, aber auf eine blockierende Weise (was ich in meinem Anwendungsfall nicht störe). Die Frage "Wie überprüft man, ob die Netzwerkadresse in Qt lokal ist" wurde nicht angezeigt. – spacm

Antwort

0

QHostAddress hat , die Sie bekommen sollten, was Sie brauchen.

Wenn Sie nur wissen wollen, ob Sie mit sich selbst verbunden sind, ist dies (teilweise?) Ein Duplikat von this question.

+0

Danke, ich versuche es gerade jetzt! – spacm

+0

Es scheint, dass es nicht tut, was ich brauche: wenn ich versuche, ein 'qDebug() <<" ist auf localhost: "<< QHostAddress (" 192.168.1.18 "). IsLoopback();' Ich werde eine falsche erhalten , erwartet eine wahre, wie 192.168.1.18 ist eine der Schnittstellen des Hosts, auf dem ich meine App laufen. – spacm

0

Hier ist, was ich habe:

bool isThisLocalHost(QString hostName) { 
    QList <QHostAddress> lAddrHostName = QHostInfo::fromName(hostName).addresses(); 
    QList <QHostAddress> lAddrLocalHostInterfaces = QNetworkInterface::allAddresses(); 
    bool bRes = false; 
    foreach (QHostAddress addr, lAddrHostName) { 
     bRes = bRes || lAddrLocalHostInterfaces.contains(addr); 
    } 
return bRes; 
}