Heim  >  Artikel  >  Java  >  Warum kann mein Java-Programm keine anderen Hosts als Localhost anpingen?

Warum kann mein Java-Programm keine anderen Hosts als Localhost anpingen?

Susan Sarandon
Susan SarandonOriginal
2024-10-25 09:09:02514Durchsuche

Why Can't My Java Program Ping Hosts Other Than Localhost?

Fehlerbehebung bei Ping-Problemen in Java

Beim Versuch, eine IP-Adresse mit Java anzupingen, kann bei einigen Benutzern das Problem auftreten, dass der lokale Host erreichbar ist aber alle anderen Hosts geben die Meldung „Host ist NICHT erreichbar“ zurück. Dieser Artikel untersucht die zugrunde liegende Ursache und bietet eine mögliche Lösung.

Codeillustration

Das bereitgestellte Codefragment versucht, zwei IP-Adressen anzupingen: localhost (127.0.0.1) und eine externe Adresse (173.194.32.38). Die Methode isReachable() gibt true zurück, wenn der Host innerhalb des angegebenen Timeouts (5000 Millisekunden) erreichbar ist, andernfalls false.

Ursache

Gemäß der Java-Dokumentation Die Methode isReachable() verwendet normalerweise ICMP ECHO REQUESTs, um die Erreichbarkeit des Hosts zu bestimmen. Für die Verwendung von ICMP sind jedoch häufig erhöhte Berechtigungen (Root-Berechtigungen) erforderlich.

Lösung

Option #1: Administratorrechte erhalten

Wenn ICMP nicht blockiert ist Durch die Systemfirewall kann das Problem darin bestehen, dass der Code nicht mit ausreichenden Berechtigungen zum Ausführen von ICMP-Vorgängen ausgeführt wird. Versuchen Sie, das Programm mit Administratorrechten auszuführen.

// Windows
> runas /profile /user:administrator java -jar myapp.jar

// Unix/Linux
> sudo java -jar myapp.jar

Wenn ICMP blockiert ist, besteht die zweite Option darin, stattdessen TCP zu verwenden.

Option #2: TCP-Ping aktivieren

<code class="java">// This example uses the Google DNS server
String ipAddress = "173.194.32.38";
try {
    Socket socket = new Socket();
    socket.connect(new InetSocketAddress(ipAddress, 80), 5000);
    System.out.println("Host " + ipAddress + " is reachable");
} catch (IOException e) {
    System.out.println("Host " + ipAddress + " is NOT reachable");
}</code>

Das obige ist der detaillierte Inhalt vonWarum kann mein Java-Programm keine anderen Hosts als Localhost anpingen?. 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