Mi aplicación de chat se conecta a un servidor y el usuario envía o recibe información. Cuando la conexión cambia, como 3g-> wifi, wifi-> 3g, la pérdida de una conexión de datos, etc., el socket a veces permanece conectado durante años antes de desconectarse. Durante este tiempo, es imposible saber si la conexión aún está activa, parece que los mensajes se envían correctamente. Otras veces, al enviar un mensaje, lanzará un error de IO y se desconectará.El zócalo no se desconecta cuando cambia la conectividad
Además de implementar código para detectar cambios de conexión y volver a conectarlos de manera apropiada, ¿es posible que el socket arroje inmediatamente una excepción de IO cuando cambia la conectividad?
Editar: Estoy conectando con el siguiente código:
Socket sock = new Socket();
sock.connect(new InetSocketAddress(getAddress(), getPort())), getTimeout());
//get bufferedReader and read until BufferedReader#readLine() returns null
no estoy usando setSoTimeout como datos no pueden ser transferidos durante largos períodos de tiempo dependiendo de la configuración del servidor remoto.
Luego vea http://stackoverflow.com/questions/969866/java-detect-lost-connection http://stackoverflow.com/questions/155243/why-is-it-impossible-without-trying-io-to-detect-that-tcp-socket-was-grace –