Foros del Web » Programación para mayores de 30 ;) » Java »

Socket que se cierra tras un tiempo sin recibir datos

Estas en el tema de Socket que se cierra tras un tiempo sin recibir datos en el foro de Java en Foros del Web. Hola a todos: Tengo una aplicación de chat en la que el cliente está implementado en Java y el servidor en C++. El problema es ...
  #1 (permalink)  
Antiguo 25/04/2007, 11:34
 
Fecha de Ingreso: abril-2007
Mensajes: 2
Antigüedad: 17 años
Puntos: 0
Socket que se cierra tras un tiempo sin recibir datos

Hola a todos:

Tengo una aplicación de chat en la que el cliente está implementado en Java y el servidor en C++. El problema es que cuando el cliente pasa mucho rato (entre 20 y 30 minutos, según mis comprobaciones) sin recibir mensajes, deja de recibirlos. Me explico: tras un tiempo parado, aunque los demás usuarios envien mensajes no llegan; sin embargo, los que este cliente envía sí que llegan a los demás.

La hebra encargada de la lectura se queda bloqueada indefinidamente en el read() y cuando finalmente se reciben datos se produce una excepción "socket closed", por lo que el problema parece ser que el socket se ha cerrado. Sin embargo, ni en el cliente ni en el servidor he programado ese close(). De hecho, el servidor envía los mensajes a este cliente sin detectar que el socket en cuestión se haya cerrado.

He estado leyendo sobre sockets, pero en ningún sitio he visto nada que haga referencia a la posibilidad de que un socket se cierre "solo" (tal vez por cuestiones de seguridad, o que lo haga el sistema operativo (las pruebas las estoy haciendo sobre windows xp)?)...

Es posible que si pasa un cierto tiempo sin recibir datos, el socket se cierre?
¿Este comportamiento es normal? ¿Cómo lo evito?

También he probado a ver el estado del socket con las funciones getSoTimeOut(), isConnected(), isClosed(), isInputShutDown()... y todas indican que el socket está bien. También he probado a activar la opción keepAlive con setKeepAlive(true), pero tampoco ha dado resultado.

¿Alguien tiene alguna sugerencia?
  #2 (permalink)  
Antiguo 25/04/2007, 12:18
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Socket que se cierra tras un tiempo sin recibir datos

Puede que sea cuestion del sistema operativo, ya que al detectar tanto tiempo un socket sin usar, si no es del tipo "server" lo cierre. Una solución habitual en estos casos es enviar un "ping" periodicamente al servidor. Este "ping" es un mensaje de un formato determinado para que el que lo recibe lo ignore, pero sabiendo que eso significa que el socket sigue abierto. Si no recibe un ping en X tiempo, es que algo pasa.

S!
  #3 (permalink)  
Antiguo 25/04/2007, 12:39
 
Fecha de Ingreso: abril-2007
Mensajes: 2
Antigüedad: 17 años
Puntos: 0
Re: Socket que se cierra tras un tiempo sin recibir datos

Hola:

Gracias por la respuesta.

Ya estoy barajando la alternativa del ping, pues pensé que si el problema es la inactividad, una solución es no permitir esa inactividad. Lo único, que me parecía una solución un poco chapuza y quería saber si hay alguna otra opción y conocer el motivo real del problema (sigo abierta a sugerencias).

Lo dicho, muchas gracias!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:40.