Moja aplikacja łączy się z serwerem TCP. Chciałbym wiedzieć, że działa na tym samym hoście, co aplikacja serwera, więc może w końcu bezpośrednio uruchomić proces serwera, jeśli nie działa.
Gdy serwer nasłuchuje na interfejsie iaplikacja rozpoznaje nazwę hosta w celu połączenia z serwerem, nie jest dla mnie oczywiste ustalenie, czy skonfigurowana nazwa hosta używana do połączenia serwera wskazuje na ten sam host, co serwer.
Chciałbym coś takiego:
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;
}
Właściwie to staram się to osiągnąć QNetworkInterface, QNetworkAddressEntry, QHostInfo, QHostAddress.
Może jest jakiś prosty sposób?
Odpowiedzi:
0 dla odpowiedzi № 1QHostAddress ma isLoopback () co powinno zapewnić ci to, czego potrzebujesz.
Jeśli chcesz tylko wiedzieć, czy jesteś podłączony do siebie, jest to (częściowo?) Duplikat to pytanie.
0 dla odpowiedzi nr 2
Oto, co mam:
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;
}