Estoy usando un cliente de socket Java. En un caso en el que el servidor todavía está conectado a mi cliente pero no envía una respuesta a mi mensaje, finalmente obtengo una excepción de tiempo de espera de lectura.¿Cómo se puede conectar y cerrar un socket?
En ese caso, quiero probar para ver si debo volver a conectar mi socket o simplemente mantenerlo reutilizado.
utilizo esta condición:
if (!socket.isConnected() || socket.isClosed() || !socket.isBound()) {
try {
socket.close();
} catch (IOException e1) {
}
// Wait on a new connection
socket = connectSocket(.....);
}
Pero siempre parece volver a conectar. Cuando intento acceder a los valores de las propiedades booleanas veo esto:
conexión: verdadera cerrado: cierto límite: verdadera
¿Cómo puede ser conectada y cerrada?
TIA
Las llamadas a métodos no son atómicas ... ¿quizás otro hilo está cerrando el socket entre las llamadas 'isConnected()' y 'isClosed()'? Tal vez sincronizar en el objeto de socket primero? – Powerlord
Eso es fácil de probar si solo invierte el orden de los controles para 'isConnected()' y 'isClosed()'. –