Estoy tratando de averiguar si se pueden alcanzar hosts específicos en mi red. Mi código de Java es la siguiente:Java InetAddress.isReachable() timeout
InetAddress adr = InetAddress.getByName(host);
if(adr.isReachable(3000)){
System.out.println(host + " is reachable");
}
Esto funciona bastante bien, sin embargo, si me baja el tiempo de espera de 500 ms en lugar de decir, no va a designar el host 'alcanzable más. Planeo verificar bastantes hosts en un bucle, por lo que tener un tiempo de espera bajo es bastante importante. Si hago ping al host manualmente desde la línea de comandos de Windows, toma menos de 10 ms.
Entonces, ¿por qué el método Java necesita un tiempo de espera mucho mayor para tener éxito? ¿Hay alguna alternativa al uso de isReachable()
?
Gracias, Esencialmente sí, me gustaría conectarme/verificar los hosts en el puerto 10001 que utilizan los dispositivos que necesito encontrar. ¿Podría dar un ejemplo de cómo implementar esa verificación de puerto conocida? – Jerome
Bueno, no paso a implementar un método de E/S sin bloqueo (NIO). Pero yo diría simplemente crear un zócalo. Cree un SocketAddress con la IP de destino y el puerto 10001. Luego llame a socket.connect (SocketAddress, timeout) con el tiempo de espera apropiado. Captura TimeOutException. Si el socket.connect() regresa sin excepción, cierre el socket, usted sabe que el dispositivo está escuchando en 10001. Para un modelo de NIO, eche un vistazo al proyecto de código abierto de Netty y ejemplos. – brettw