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

Cerrar ServerSocket

Estas en el tema de Cerrar ServerSocket en el foro de Java en Foros del Web. Hola, el título lo dice todo, lo que quiero es saber cómo cerrar una instancia de la clase ServerSocket, (sé que es con close()) pero ...
  #1 (permalink)  
Antiguo 20/03/2010, 07:14
 
Fecha de Ingreso: diciembre-2009
Mensajes: 18
Antigüedad: 14 años, 4 meses
Puntos: 0
Cerrar ServerSocket

Hola, el título lo dice todo, lo que quiero es saber cómo cerrar una instancia de la
clase ServerSocket, (sé que es con close()) pero desbloqueándolo de acept(), es decir, cuando haya que salir de la aplicación, se desbloquea y se cierra.

Muchas gracias.
  #2 (permalink)  
Antiguo 20/03/2010, 09:40
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Cerrar ServerSocket

Desde otro Thread, llamas a close() y eso hará que el thread principal salga del accept (con una excepcion). Normalmente el accept esta dentro de un bucle, así que para evitar que piense que es un error o que vuelva al accept, pon un booleano que indique si es hora de cerrarse o no, y justo antes de llamar al close, pones al booleano al valor adecuado.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.

Última edición por GreenEyed; 20/03/2010 a las 09:46
  #3 (permalink)  
Antiguo 20/03/2010, 11:17
 
Fecha de Ingreso: diciembre-2009
Mensajes: 18
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Cerrar ServerSocket

Muchas gracias, eso ya lo probe, pero quería evitar la excepción .

Ahora lo que tengo hecho (que es un poco cutre, la verdad) es que la hebra que manda cerrar ponga un booleano a falso, cree un socket al mismo puerto (para que la hebra del servidor salga del acept()) y ya acaba el bucle.

¿Entonces no se puede desbloquear sin más de acept() sin que genere una excepción y cerrar el serverSocket?
  #4 (permalink)  
Antiguo 20/03/2010, 12:03
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Cerrar ServerSocket

La otra opción es usar timeout en el accept, pero sólo se apagará cuando pase el tiempo que le pongas, así que tampoco es muy "limpio". En realidad no hay método limpio puesto que ¿como vas a notificar si se supone que está escuchando "forever" del socket hasta que le llegue algo? Pues o le dices algo por el socket o se lo cierras. No hay mucho más.
Otra opción sería usar sockets no-bloquentes usando NIO, pero es mucho más complejo y para algo tan simple como cerrar el socket no te merece la pena.

Para otra vez, es mejor comentar lo que ya has intentado y así te ahorrarás que la gente te lo vuelva a sugerir, y la gente escribírtelo .

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.

Etiquetas: cerrar
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 04:36.