¿Es ‘inet.isReachable (5000)’ la mejor manera de hacer ping a un cliente en Java?

Si bien parece que sí, en la práctica hay muchas razones por las que esto podría fallar. Con frecuencia, los firewalls bloquean los paquetes ICMP. Además, de la forma en que Java realiza la llamada, no tendrá permisos a menos que su programa se ejecute como root. (En * nix, el comando ping usa setuid).

Si buscas en Google, encontrarás que el consenso general es que no hay una manera perfecta de hacer esto. Sin embargo, hay un par de cosas que puede probar que podrían funcionar para usted:

1) intente abrir un Socket a la dirección y al puerto específico que le interese. Si tiene éxito, se puede acceder a la dirección.

2) esto es un poco desagradable, pero puede intentar usar Runtime.exec para ejecutar el comando ping. Esto es específico de la plataforma (yuck), pero debería solucionar el problema setuid. Si el firewall bloquea ICMP, todavía está atascado.

Si lo que finalmente desea hacer es hacer una conexión a la dirección dada, entonces abrir un socket TCP a la dirección y el puerto específico parece un enfoque razonable. Después de todo, si no puede hacer eso, entonces no podrá comunicarse, por lo que es un buen indicador, IMHO.