Heim >Java >javaLernprogramm >Warum gibt InetAddress.isReachable() manchmal „False' zurück, selbst wenn der Ping erfolgreich ist?

Warum gibt InetAddress.isReachable() manchmal „False' zurück, selbst wenn der Ping erfolgreich ist?

Barbara Streisand
Barbara StreisandOriginal
2024-12-02 09:18:10634Durchsuche

Why Does InetAddress.isReachable() Sometimes Return False Even When Ping Succeeds?

Enthüllung der Trennung: Warum InetAddress.isReachable() falsch meldet

Beim Versuch, die Erreichbarkeit einer IP-Adresse mithilfe von InetAddress.isReachable zu ermitteln () können Benutzer auf unerwartete falsche Antworten stoßen, obwohl sie dieselbe Adresse erfolgreich anpingen konnten. Diese Diskrepanz kann auf Einschränkungen bei der Implementierung von isReachable() zurückgeführt werden.

Im Gegensatz zu Ping, das ein Netzwerkpaket direkt an die Ziel-IP sendet, basiert isReachable() auf einem plattformabhängigen Mechanismus namens ICMP (Internet Control Message Protocol) Echo-Anfragen. Wenn die ICMP-Anfrage nicht innerhalb des angegebenen Timeout-Zeitraums beantwortet wird, gibt isReachable() false zurück, auch wenn die IP noch erreichbar ist.

Bereitstellung einer plattformübergreifenden Lösung

Für eine plattformunabhängige Lösung, die eine Reihe von Konnektivitätsprüfungen umfasst, sollten Sie den Einsatz einer Technik in Betracht ziehen, die nach offenen Ports auf dem Zielcomputer sucht. Dieser Ansatz nutzt die Tatsache aus, dass die meisten Geräte über offene Ports für Dienste wie SSH, Webserver oder Mailserver verfügen.

Hier ist ein Codeausschnitt, der diese Methode implementiert:

private static boolean isReachable(String addr, int openPort, int timeOutMillis) {
    // Any Open port on other machine
    // openPort =  22 - ssh, 80 or 443 - webserver, 25 - mailserver etc.
    try (Socket soc = new Socket()) {
        soc.connect(new InetSocketAddress(addr, openPort), timeOutMillis);
        return true;
    } catch (IOException ex) {
        return false;
    }
}

Durch die Verwendung Mit dieser Technik erhalten Sie die Möglichkeit, die Erreichbarkeit unabhängig von der zugrunde liegenden Plattform zu bestimmen und so konsistentere Ergebnisse zu gewährleisten.

Das obige ist der detaillierte Inhalt vonWarum gibt InetAddress.isReachable() manchmal „False' zurück, selbst wenn der Ping erfolgreich ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn