Al usar java.net.Socket.connect()
, tanto una conexión rechazada como un tiempo de espera dan como resultado un ConnectException
.Distinga entre la conexión rechazada y el tiempo de espera de la conexión expiró
java.net.ConnectException: Connection timed out: connect
java.net.ConnectException: Connection refused: connect
¿Cómo puedo distinguir con seguridad entre los dos? Asegúrese de analizar el mensaje de error hace el trabajo. Pero cuando el mensaje cambie en una futura versión de Java, no tengo suerte.
La imagen más grande: estoy escribiendo un cliente de servicio web utilizando JAX-WS con una implementación de Metro. Cuando falla una llamada al servicio web, quiero informar claramente el motivo del error para que el problema pueda resolverse rápidamente.
Tener una alternativa es una solución aceptable. –
Me gusta esta respuesta, pero mantengo mi sugerencia anterior: ¡abstraerla! Lo último que desea es un montón de comprobaciones inconsistentes y repetitivas en una interfaz en la que no puede confiar. Cree una interfaz que tenga sentido para usted y abstraiga los detalles. No desea editar una docena de archivos si algo cambia. – riwalk