Java - Socket que atienda a varios clientes (2)

 
Vista:

Socket que atienda a varios clientes (2)

Publicado por ainhoa (2 intervenciones) el 05/03/2007 12:20:10
Lo siento, se me olvido decirso que el SocketServer lo arranco en el método init() del servlet.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Socket que atienda a varios clientes (2)

Publicado por Gonzalo (180 intervenciones) el 05/03/2007 13:06:29
Si lo que quieres decir es que en el init() del servelt llamas a:
····Serversocket ss = CrearSocketServidor();
Pues entonces es bastante normal que no te funcione más que la primera vez.

¿Por qué? Pues porque lo que estás haciendo es atender la propia petición dentro del método de creación del socket.
Es decir, que cuando haces la llamada, lo que estás haciendo es:

1. creo un socket
2. espero a recibir una petición
3. sirvo la petición
4. devuelvo el socket
5. cierras el bucle.

Es decir, que sales del bucle cuando has servido la primera petición y ya no haces nada con el socket:

while (true) {
aceptoUnaPeticion();
laSirvo();
return socket;
}
Como ves, no sirve de mucho ahí el bucle.

El bucle de escucha debe estar fuera de la creación del socket. Es decir, en el init() del servlet.

Además, dado que lo quieres hacer en un servlet, lo lógico será que el server socket corra en un thread diferente, ya que si metes el bucle directamente en el init() del servlet, no va a terminar nunca y el servidor se va a quedar esperando.

Básicamente:
- desde el init() lanza un thread nuevo y le haces un start();
- el thread nuevo:
····- crea el socket
····- se queda en un bucle a la espera de conexiones
- el servlet sigue con si vida tranquilamente.


También, si quieres poder atender varias peticiones a la vez, lo apropiado es que cada vez que recibas una conexión, lances un nuevo thread que la atienda. Busca ejemplos que hay muchos. Por ejemplo:
http://gsyc.escet.urjc.es/docencia/asignaturas/redes-II/practicas-2005-06/node4.html
http://nereida.deioc.ull.es/~cleon/doctorado/doc06/doc06/html/node9.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar