Warum InetAddress.isReachable false zurück, wenn ich einen ping an die IP Adresse?
InetAddress byName = InetAddress.getByName("173.39.161.140");
System.out.println(byName);
System.out.println(byName.isReachable(1000));
Warum isReachable
zurück false
? Ich kann ping für die IP.
Mögliche Duplikate von: stackoverflow.com/questions/4779367/...
es ist ähnlich. aber ich kann nicht gefunden, keine Ahnung, das problem zu lösen.Also ich reraised es hier. Danke für die Erinnerung!
Ich würde versuchen, die Erhöhung der timeout-Zeit.
dies ist eine sehr gute Frage, es gibt nicht genug upvotes. Die einzige ähnliche Frage, die ich fand, war die Kennzeichnung als eine clojure Frage, und die Antwort war nicht eindeutig.
kann mir jemand sagen, was genau isReachable() ist? es gibt mir false noch auf localhost...
es ist ähnlich. aber ich kann nicht gefunden, keine Ahnung, das problem zu lösen.Also ich reraised es hier. Danke für die Erinnerung!
Ich würde versuchen, die Erhöhung der timeout-Zeit.
dies ist eine sehr gute Frage, es gibt nicht genug upvotes. Die einzige ähnliche Frage, die ich fand, war die Kennzeichnung als eine clojure Frage, und die Antwort war nicht eindeutig.
kann mir jemand sagen, was genau isReachable() ist? es gibt mir false noch auf localhost...
InformationsquelleAutor jiafu | 2012-03-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den "isReachable" Methode wurde nicht würdig mit mir in vielen Fällen. Sie können ganz nach unten scrollen, um zu sehen, meine alternative ist, die einfach nur testen, wenn Sie online sind und zur Beilegung von externen hosts (D. H. google.com) ... Die in der Regel scheint zu funktionieren auf *NIX Maschinen.
Das Problem
Gibt es eine Menge Geschwätz über diese :
Hier sind andere, ähnliche Fragen :
Erkennen internet-Verbindung mit Java
Wie kann ich testen Sie die Verfügbarkeit von internet in Java?
Und sogar ein gemeldeter Fehler auf dieser gleichen Materie :
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4921816
Teil 1 : Ein reproduzierbares Beispiel das problem
Beachten Sie, dass in diesem Fall, es funktioniert nicht.
Teil 2 : Ein Hackish Abhilfe
Als alternative, können Sie dies tun :
Die option-c von ping erlauben ping, einfach zu versuchen den server zu erreichen einmal(im Gegensatz zu den unendlichen ping, die wir verwendet, um die Verwendung auf dem terminal).
Zurückkehren 0, wenn der host erreichbar ist,. Ansonsten bekommen Sie "2" als Wert zurück.
Viel einfachere - aber natürlich ist Plattform-spezifisch.
Und möglicherweise gibt es gewisse Berechtigung Vorsichtsmaßnahmen für die Verwendung dieses Befehl - aber ich finde, es funktioniert auf meinem Maschinen.
BITTE Beachten Sie, dass :
1) Diese Lösung ist nicht für die Produktion von Qualität. Es ist ein bisschen ein hack. Wenn google down ist, oder Ihr internet wird vorübergehend verlangsamen, oder vielleicht sogar, wenn es einige funniness in Ihren Privilegien/system-Einstellungen, wenn Sie zurückkehren könnten falsch-negative Befunde (d.h. es könnte fehlschlagen, obwohl die input-Adresse erreichbar ist).
2) Die isReachable Fehler ist eine offene Frage. Wieder gibt es mehrere online-Ressourcen, die angibt, dass es keine "perfekte" Art und Weise, dies zu tun, zu der Zeit des Schreibens dieses Artikels, durch die Art und Weise der JVM versucht zu erreichen hosts - ich denke, es ist eine wirklich Plattform-spezifische Aufgabe, die, obwohl einfach, ist noch nicht abstrahiert hinreichend von den JVM.
weder der Ansatz der Arbeit, der
isReachable
ich bin immer gescheitert und mit ping bin ich immer icmp nicht erlaubt ? Wissen Sie, wie Sie mit ihm umgehen jetzt ?Wenn Sie Windows verwenden, werden die flags unterscheiden. Anstelle von-c Sie wollen,- n.
Part2 mein problem lösen. Vielen Dank für die Lösung.
waitFor() dauert 10 Sekunden, um zurückzukehren. Gibt es eine Möglichkeit zu erwähnen timeout in Java 7?
InformationsquelleAutor jayunit100
Kam ich hier eine Antwort bekommen für die gleiche Frage, aber ich war unzufrieden, die von einer der Antworten, weil ich war auf der Suche für eine Plattform-unabhängige Lösung. Hier ist der code, den ich schrieb, und ist Plattform-unabhängig, erfordert aber Informationen über einen offenen port auf dem anderen Computer (die haben wir die meiste Zeit).
Dies ist eine großartige Plattform-unabhängige Lösung, danke!
Ich bin froh, dass ich hier gelandet, nette Art zu denken Sourabh 🙂
Gute Arbeit, dude! Danke!!!
Dies ist identisch zu dem, was
InetAddress.isReachable()
bereits tut, über port 7, außer, dass letztere mehr intelligente über das, was die verschiedenen möglichenIOExceptions
bedeuten in Bezug auf die Erreichbarkeit.InformationsquelleAutor Sourabh Bhat
Wenn Sie nur wollen, um zu überprüfen, ob Sie mit dem internet verbunden ist, verwenden Sie diese Methode , Es gibt true zurück, wenn internet angeschlossen ist, Dessen vorzuziehen, wenn Sie die Adresse der Website, die Sie versuchen, eine Verbindung über das Programm.
InformationsquelleAutor CleanX
Einfach nur zu erwähnen Sie explizit, da die anderen Antworten nicht. Die ping-Teil isReachable() erfordert root-Zugriff auf Unix. Und wie bereits von bestsss in Vier Millionen sieben hundert neun und siebzig tausend drei hundert sieben und sechzig:
Da mit root war nicht eine option in meinem Fall war die Lösung erlaubt den Zugang zu port 7 in der firewall die bestimmte server, an dem ich interessiert war.
InformationsquelleAutor Zitrax
Ich bin nicht sicher, was war der Zustand, wenn die ursprüngliche Frage wurde wieder in 2012.
Wie es jetzt steht, ping wird ausgeführt als root. Durch das ping ausführbaren Berechtigung sehen Sie die +s-Kennzeichen und das Verfahren der Zugehörigkeit zu Stamm, was bedeutet, es wird als root ausgeführt. führen Sie ls -liat auf, wo der ping liegt, und Sie sollte es sehen.
So, wenn Sie InetAddress.getByName("www.google.com").isReacheable(5000) als root, sollte es wieder wahr.
müssen Sie die richtigen Berechtigungen für den raw-socket, der verwendet wird ICMP (das Protokoll von ping verwendet)
InetAddress.getByName so zuverlässig ist wie ping, aber Sie müssen die richtigen Berechtigungen für den Prozess zu haben, es läuft einwandfrei.
InformationsquelleAutor Clebert Suconic
Ich würde vorschlagen, dass die EINZIGE zuverlässige Möglichkeit zum testen einer internet-Verbindung ist, um tatsächlich zu verbinden UND eine Datei herunterladen, ODER zum analysieren der Ausgabe eines OS-ping-Aufruf via exec(). Verlassen Sie sich nicht auf die exit-code für ping und isReachable() ist Mist.
Verlassen Sie sich nicht auf eine ping-exit-code 0 zurück, wenn der ping-Befehl ordnungsgemäß ausgeführt wird. Leider, ping ordnungsgemäß ausgeführt wird, wenn Sie es nicht erreichen können, der Ziel-host jedoch wird ein "Destination host unreachable" aus Ihrem home-ADSL-router. Dies ist eine Art von einer Antwort, wird behandelt wie ein erfolgreicher Treffer, so exit-code = 0 ist. Muss allerdings hinzufügen, dass dies auf einem Windows-system. Nicht geprüft *Nixen.
InformationsquelleAutor cossoft
es gibt auch die "Allgemeinen Fehler" Fehlermeldung. Dies sieht auch wie windows-spezifisch. Ich bin mir ziemlich sicher, dass diese Fehlermeldungen sind in verschiedene Sprachen übersetzt, also nicht super tragbar.
InformationsquelleAutor Armin Mokri
Oder mit diesem Weg:
InformationsquelleAutor Yousha Aleayoub
Da kann man ping an den computer, Ihre Java-Prozess laufen soll mit ausreichenden Privilegien, um die überprüfung durchzuführen. Wahrscheinlich aufgrund der Verwendung von ports im unteren Bereich. Wenn Sie Ihr java-Programm mit sudo/superuser, ich Wette, es funktioniert.
InformationsquelleAutor col