Cum să implementați propria metodă InetAddress.isReachable(String address, int port, int timeout) în Java?
Publicat: 2020-10-06
În Java există mai multe moduri de a verifica ping-ul și portul. Puteți utiliza comanda ping implicită a sistemului, utilitarul InetAddress
pentru metoda nativă Java, HttpURLConnection
și altele.
În producție sau în mediul dvs. de testare, dacă doriți să efectuați mai multe verificări de porturi, să spunem sute de verificări în același timp, uneori metoda InetAddress.isReachable()
nu primește un răspuns corect.
Infectează în cazul meu, am observat un eșec 100% în timp ce încercam să mă conectez la www.google.com. Aveți vreo întrebare de mai jos?
- java – De ce InetAddress.isReachable returnează false, când pot ping adresa IP?
- Cum verific dacă am conexiune la internet?
- Exemple de cod Java pentru java.net.InetAddress.isReachable()
- java verifica daca adresa ip este accesibila
- Cum se testează dacă un sistem de la distanță este accesibil?
Urmați acest tutorial dacă doriți să efectuați verificarea ping folosind HttpURLConnection.openConnection()
În acest tutorial vom parcurge 2 moduri diferite de a efectua verificarea Ping:
- Metoda InetAddress.isReachable(timeout).
- Metoda crunchifyAddressReachable a lui
crunchifyAddressReachable(host, port, timeout)
care funcționează 100% din timp
Să începem:
- Creați clasa CrunchifyInetAddressIsReachable.java.
- Vom crea 2 metode pingCheckbyInetAddressisReachable() și pingCheckbyCrunchifyisReachable() în care vom efectua mai sus 2 teste diferite.
Ce metodă folosim crunchifyAddressReachable()?
Utilizăm java.net.Socket
în implementarea noastră. Clasa Socket implementează socket-uri client. Cu ajutorul utilitarului connect()
obținem 100% din timp un rezultat corect. Vă rugăm să aruncați o privire la codul de mai jos pentru mai multe detalii.
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 ( ) ; } } } |
După ce copiați codul în mediul Eclipse, rulați ca aplicație Java pentru a vedea rezultatul de mai jos.

Ieșire consolă:
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 |