Wie implementieren Sie Ihre eigene Methode InetAddress.isReachable (String address, int port, int timeout) in Java?
Veröffentlicht: 2020-10-06
In Java gibt es mehrere Möglichkeiten, Ping und Port zu überprüfen. Sie können den Ping-Befehl des Systemstandard, das native InetAddress
-Dienstprogramm von Java, HttpURLConnection
und einige mehr verwenden.
Wenn Sie in der Produktion oder Ihrer Testumgebung mehrere Portprüfungen durchführen möchten, sagen wir Hunderte von Prüfungen gleichzeitig, erhält die Methode InetAddress.isReachable()
manchmal keine korrekte Antwort.
Infect In meinem Fall habe ich beim Versuch, eine Verbindung zu www.google.com herzustellen, einen 100-prozentigen Ausfall festgestellt. Haben Sie eine der folgenden Fragen?
- java – Warum gibt InetAddress.isReachable false zurück, wenn ich die IP-Adresse pingen kann?
- Wie überprüfe ich, ob ich eine Internetverbindung habe?
- Java-Codebeispiele für java.net.InetAddress.isReachable()
- Java prüfen, ob die IP-Adresse erreichbar ist
- Wie teste ich, ob ein entferntes System erreichbar ist?
Befolgen Sie dieses Tutorial, wenn Sie eine Ping-Prüfung mit HttpURLConnection.openConnection() durchführen möchten.
In diesem Tutorial gehen wir auf 2 verschiedene Möglichkeiten zur Durchführung der Ping-Prüfung ein:
- InetAddress.isReachable(timeout)-Methode
- Crunchifys
crunchifyAddressReachable(host, port, timeout)
-Methode, die 100 % der Zeit funktioniert
Lass uns anfangen:
- Erstellen Sie die Klasse CrunchifyInetAddressIsReachable.java.
- Wir werden 2 Methoden pingCheckbyInetAddressisReachable() und pingCheckbyCrunchifyisReachable() erstellen, in denen wir die oben genannten 2 verschiedenen Tests durchführen.
Welche Methode verwenden wir crunchifyAddressReachable()?
Wir verwenden java.net.Socket
in unserer Implementierung. Die Socket-Klasse implementiert Client-Sockets. Mit Hilfe des Dienstprogramms connect()
erhalten wir zu 100 % ein korrektes Ergebnis. Bitte werfen Sie einen Blick auf den folgenden Code für weitere Details.
CrunchifyInetAddressIsReachable.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
package crunchify . com . tutorial ; import java . io . IOException ; import java . net . InetAddress ; import java . net . InetSocketAddress ; import java . net . Socket ; /** * @author Crunchify.com * Problem: Sometimes InetAddress.isReachable() gives false result. * We have implemented the same Reachable check using Socket. It works almost 100% of the time. * Comparison added. * Version: 1.1 * */ public class CrunchifyInetAddressIsReachable { static String host = "www.google.com" ; public static void main ( String [ ] args ) { // check ping using default Java Utility pingCheckbyInetAddressisReachable ( ) ; // check ping using modified Crunchify Utility pingCheckbyCrunchifyisReachable ( ) ; } private static void pingCheckbyInetAddressisReachable ( ) { try { InetAddress crunchifyAddr = InetAddress . getByName ( host ) ; boolean reachable = crunchifyAddr . isReachable ( 2000 ) ; if ( reachable ) { System . out . println ( "InetAddress.isReachable(timeout) Result ==> Ping successful for host: " + host ) ; } else { System . out . println ( "InetAddress.isReachable(timeout) Result ==> Ping failed for host: " + host ) ; } } catch ( Exception e ) { e . printStackTrace ( ) ; } } private static void pingCheckbyCrunchifyisReachable ( ) { try { crunchifyAddressReachable ( host , 80 , 2000 ) ; System . out . println ( "\nOverloaded isReachable(host, port, timeout) Result ==> Ping successful for host: " + host ) ; } catch ( Exception e ) { System . out . println ( "\nOverloaded isReachable(host, port, timeout) Result ==> Ping failed for host: " + host ) ; } } /* * Overriding default InetAddress.isReachable() method to add 2 more arguments port and timeout value * * Address: www.google.com * port: 80 or 443 * timeout: 2000 (in milliseconds) */ private static boolean crunchifyAddressReachable ( String address , int port , int timeout ) throws IOException { Socket crunchifySocket = new Socket ( ) ; try { // Connects this socket to the server with a specified timeout value. crunchifySocket . connect ( new InetSocketAddress ( address , port ) , timeout ) ; // Return true if connection successful return true ; } catch ( IOException exception ) { exception . printStackTrace ( ) ; // Return false if connection fails return false ; } finally { crunchifySocket . close ( ) ; } } } |
Sobald Sie den Code in die Eclipse-Umgebung kopiert haben, führen Sie ihn einfach als Java-Anwendung aus, um das folgende Ergebnis zu sehen.

Konsolenausgabe:
1 2 3 |
InetAddress . isReachable ( 2000 ) Result == > Ping failed for host : www . google . com Overloaded isReachable ( host , port , timeout ) Result == > Ping successful for host : www . google . com |