Java - Servidor escuchando varios puertos.

   
Vista:

Servidor escuchando varios puertos.

Publicado por Miguel Angel (2 intervenciones) el 23/10/2008 12:12:26
Hola buenos dias.

Vereis tengo que crear una aplicacion que hace de servidor, el cual recibe conexiones por 4 puertos a la vez. Utilizo threads para que lo gestione en paralelo pero no funciona del todo bien...

El caso es que por supuesto si pongo que reciba y procese las conexiones de un unico puerto me lo hace perfectamente pero si añado otro puerto mas me surge el siguiente problema:

Creo 2 ServerSocket , uno para el puerto 1027 y otro para el 1028 ( por ejemplo ), a continuacion me pongo a escuchar en el puerto 1027 y en teoria tambien en el 1028. Vale, el problema es el siguiente: Me llega una conexion por el 1027 y la acepto y proceso ( hasta aqui bien ) , ahora esta esperando tambien una por el 1028 pero sino llega ninguna conexion se queda esperando ahi y no vuelve al inicio del bucle donde se esperan nuevas conexiones al 1027... por tanto no puedo recibir conexiones en el 1027 sino recibo conexiones en el 1028... como soluciono esto? Como consigo que vuelva a esperar una conexion en el 1027 mientras esta esperando en el 1028?

Adjunto el codigo para que se vea mas claro...

public class Servidor {

public static void main(String[] args) {
ServerSocket ss = null;
ServerSocket ss2 =null;

// Creamos sockets servidor para los distintos puertos.
try {
ss = new ServerSocket(1027);
}
catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}
try {
ss2 = new ServerSocket(1028);
}
catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}

System.out.println("Servidor a la escucha...");

// Atendemos las peticiones en paralelo para cada uno de los puertos.
while(true){
try {
new GestionaPuerto1027(ss.accept()).start(); // esta clase extiende a Thread
new GestionaPuerto1028(ss2.accept()).start(); // esta clase extiende a Thread
}
catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}
}
}

}
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:Servidor escuchando varios puertos.

Publicado por Tom (912 intervenciones) el 23/10/2008 17:56:45
Si lees la doc. de ServerSocket.accept() verás que "El método bloquea hasta que se realiza una conexión".

Así que, si lo piensas un poco, llegarás a entender por qué te funciona como te funciona.

Tienes que hacer el accept() dentro de cada thread, y además en un bucle:

while(ss.accept()) {
}
(algo así)
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