Java - SOBREELTEMAPASADO (HERENCIA Y VARIABLES)

 
Vista:

SOBREELTEMAPASADO (HERENCIA Y VARIABLES)

Publicado por Russ (33 intervenciones) el 27/04/2006 01:04:42
Si no se si te acuerdes que te pregunte sobre sockets que no me aceptara un numero determinado de conexiones (Sockets) que yo le especificara y me respondiste con una solucion dentro del ciclo while :......................

Bueno... a ver... mmm prrfffff...

Intenta esto...

int cantidad = 5;
while (true)
{
if(cantidad>0) {
socketClient = socketServer.accept();
conn = new SocketThread (socketClient);
conn start();
cantidad--;
System.out.println("Quedan "+cantidad+" conexiones por otorgar);
}
}
esa fue la solucion que me propusiste y por parte del servidor funciona pero que pasa si corro un 6o. cliente ??? el servidor no me lo acepta pero el cliente se queda trabado dentro de si mismo obviamente entonces pense que por parte del cliente tambien habia que hacer una validacion similar dentro del constructor:

if(....................)
{
socketCllient = new Socket (host,port);
}
else
{
System.exit (0);

o algo asi por ejemplo y entonces pense que dentro de la condicion dentro del bloque if tiene que ser de alguna forma la referencia de la cantidad de conexiones maximas permitidas en este caso y asi que sepa el cliente hasta cuantas veces se pueda ejecutar para este ejemplo la variable "cantidad" y para esto ya con el numero maximo de conexiones para que de esta forma pueda hacer mas o menos esto:

int contador = 0;
if(contador< cantidad)
{
socketCllient = new Socket (host,port);
contador ++;
}
else
{
System.exit (0);
para el caso del cliente.

Pero como habras notado tanto servidor como cliente estan en clases separadas cada una dentro de su propio metodo main y es por eso que si en el servidor le doy un valor (argv [ 0 ]) sea el mismo valor que reconozca el cliente y de ahi el porque de mi duda pasada en el post anterior (RE:PREGUNTA SENCILLA SOBRE VARIABLES Y HERENCIA )y es por eso que queria ver si es posible esto o no se si me puedas decir si hay otro modo de que el cliente sepa hasta el maximo numero de conexiones que pueda establecer con el servidor usando sus propios recursos dentro de su misma clase si es que no es posible ejecutar la solucion que propongo ............
MUchas gracias por tu molestia
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
sin imagen de perfil

RE:SOBREELTEMAPASADO (HERENCIA Y VARIABLES)

Publicado por chuidiang (950 intervenciones) el 27/04/2006 08:16:55
Hola:

Un SocketServidor en el momento que lo creas, lo preparas y tal está a la escucha de clientes. Acepta a los clientes cuando haces accept().

Si el SocketServidor no está a la escucha, el cliente que intente conectarse saldrá inmediatamente con una excepción de "connection refused".

Si el SocketServidor está a la escucha, pero no hace el accept(), el cliente se queda colgado en espera de que el servidor haga accept(), que es tu caso.

La solución más sencilla es que después de accept() las cinco conexiones, cierres el ServerSocket (no los socketClient, sin socketServer). De esta forma ya no está a la escucha.

En el cliente captura la excepción y así sabrás que el servidor ya ha aceptado el número máximo de conexiones (o simplemente que no lo has arrancado).

Se bueno.
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

RE:SOBREELTEMAPASADO (HERENCIA Y VARIABLES)

Publicado por manru (161 intervenciones) el 27/04/2006 16:52:15
Excelente respuesta chuidiang.

Creo que es la mejor solucion y la mas prolija.

Saludos
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

RE:otra pregunta (HERENCIA Y VARIABLES)

Publicado por Russ (33 intervenciones) el 27/04/2006 16:57:40
si de hecho ya habia planeado esa solucion pero que pasa si se desconecta un cliente de losd 5? entonces quedaria una conexion disponible para otro cliente no ? si despues de las 5 conexiones cierro el socket server entonces ya no va a poder aceptar mas en el futuro por eso es que no quiero que se cierre el bloque while donde tengo el accept pero ya que con esto tendria que hacer la validacion con el cliente para que no se quede colagado alguna idea????
gracias a los 2 de nuevo
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
sin imagen de perfil

RE:otra pregunta (HERENCIA Y VARIABLES)

Publicado por chuidiang (950 intervenciones) el 27/04/2006 23:26:40
Hola:

En ese caso, cuando se detecte que un cliente termina, es cuestión de volver a abrir el ServerSocket.

Se bueno.
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