¿Cómo implementar su propio método InetAddress.isReachable (String address, int port, int timeout) en Java?
Publicado: 2020-10-06
En Java hay varias formas de verificar el ping y la verificación del puerto. Puede usar el comando ping predeterminado del sistema, la utilidad InetAddress
del método nativo de Java, HttpURLConnection
y algunos más.
En producción o en su entorno de prueba, si desea realizar varias comprobaciones de puertos, digamos cientos de comprobaciones al mismo tiempo, a veces el método InetAddress.isReachable()
no obtiene la respuesta correcta.
Infect en mi caso, noté un 100% de falla al intentar conectarme a www.google.com. ¿Tiene alguna de las siguientes preguntas?
- java – ¿Por qué InetAddress.isReachable devuelve falso, cuando puedo hacer ping a la dirección IP?
- ¿Cómo comprobar si tengo conexión a Internet?
- Ejemplos de código Java para java.net.InetAddress.isReachable()
- Java comprueba si la dirección IP es accesible
- ¿Cómo probar si un sistema remoto es accesible?
Siga este tutorial si desea realizar una verificación de ping utilizando HttpURLConnection.openConnection()
En este tutorial, repasaremos 2 formas diferentes de realizar una verificación de Ping:
- Método InetAddress.isReachable (tiempo de espera)
- El método
crunchifyAddressReachable(host, port, timeout)
de Crunchify que funciona el 100 % del tiempo
Empecemos:
- Cree la clase CrunchifyInetAddressIsReachable.java.
- Crearemos 2 métodos pingCheckbyInetAddressisReachable() y pingCheckbyCrunchifyisReachable() en los que realizaremos 2 pruebas diferentes.
¿Qué método estamos usando crunchifyAddressReachable()?
Estamos usando java.net.Socket
en nuestra implementación. La clase Socket implementa sockets de clientes. Con la ayuda de la utilidad connect()
estamos obteniendo el 100% de los resultados correctos. Por favor, eche un vistazo al siguiente código para obtener más detalles.
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 ( ) ; } } } |
Una vez que copie el código en el entorno Eclipse, simplemente ejecútelo como aplicación Java para ver el resultado a continuación.

Salida de la consola:
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 |