Pregunta

Tengo un puerto de escucha en mi servidor al que me estoy conectando usando una clase Java y el Socket interfaz, es decir

Socket mySocket = new Socket(host,port);

Luego tomo un OutputStream, decorar con un PrintWriter en modo de descarga automática y me río, excepto si el puerto de escucha se cierra.entonces entiendo

tcp4       0      0  *.9999                 *.*                    LISTEN
tcp        0      0  127.0.0.1.45737        127.0.0.1.9999         CLOSE_WAIT

y parece que no puedo detectar el problema en el programa. Intenté usar el isConnected() método en el socket pero no parece saber que la conexión está cerrada.

Quiero estar al tanto del problema la próxima vez que intente escribir en el Socket para poder intentar reconectarme e informar el problema.

¿Algún consejo por favor?

Gracias a todos

¿Fue útil?

Solución

¿Establecer un tiempo de espera breve?

Hace isOutputShutdown() ¿No consigues lo que quieres?

Siempre puedes construir un SocketWatcher clase que gira por sí sola Thread e intenta repetidamente escribir cadenas vacías en el Socket hasta que eso levanta un SocketClosedException.

Otros consejos

La única forma confiable de detectar una conexión interrumpida en TCP es escribir en ella, lo que eventualmente provocará una IOException de "restablecimiento de conexión".Sin embargo, debido al almacenamiento en búfer, no sucederá en la primera escritura después de la desconexión, sino en una escritura posterior.No puedes hacer nada al respecto.

Establezca un hilo diferente para leer desde el socket.Se bloqueará hasta que se cierre el socket y luego se generará una excepción.Capte esa excepción para detectar el cierre inmediatamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top