Heim >Java >javaLernprogramm >Warum unterscheidet sich InetAddress.isReachable() manchmal von den Ping-Ergebnissen?
Informationen zu InetAddress.isReachable()-Ergebnissen
Die InetAddress-Klasse bietet einen Mechanismus zum Abrufen von Informationen über Netzwerkadressen. Eine seiner Methoden, isReachable(), prüft, ob ein Host vom lokalen Rechner aus erreichbar ist. Benutzer können jedoch auf Diskrepanzen zwischen dem Pingen einer IP-Adresse und dem Ergebnis von InetAddress.isReachable() stoßen.
Plattformunabhängigkeit für Erreichbarkeitstests
Für eine plattformunabhängige Lösung Erwägen Sie die Verwendung des folgenden Codes, der Kenntnisse über einen offenen Port auf dem Ziel erfordert Maschine:
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; } }
Aktualisierte prägnante Version
Basierend auf einem aktuellen Kommentar ist hier eine prägnantere Version des obigen Codes:
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; } }
Diese Lösung ist plattformunabhängig und liefert zuverlässige Erreichbarkeitsergebnisse.
Das obige ist der detaillierte Inhalt vonWarum unterscheidet sich InetAddress.isReachable() manchmal von den Ping-Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!