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

[SOLUCIONADO] Problema con While y con un servidor/cliente

Estas en el tema de Problema con While y con un servidor/cliente en el foro de Java en Foros del Web. Hola a todos, he estado desarrollando un sistema para control de ciber en java, ahora estoy con lo de servidor/cliente, sin embargo estoy tratando de ...
  #1 (permalink)  
Antiguo 01/02/2018, 17:26
 
Fecha de Ingreso: marzo-2016
Ubicación: World Wide Web
Mensajes: 30
Antigüedad: 8 años, 1 mes
Puntos: 3
Pregunta Problema con While y con un servidor/cliente

Hola a todos, he estado desarrollando un sistema para control de ciber en java, ahora estoy con lo de servidor/cliente, sin embargo estoy tratando de adaptar un prototipo de dicho sistema mediante un chat multi clientes, la cuestión es que por medio de un botón Inicio mi servidor, pero la interfaz gráfica se detiene, he investigado pero no doy con la solución la idea es que el servidor este activo y siempre en escucha de las maquinas clientes.

El código con el que inicio el servidor es este:
Código:
String[] arguments = new String[] {};
 new MultiThreadChatServerSync().main(arguments);
lo que contiene la clase es esto:
Código:
try {
      serverSocket = new ServerSocket(portNumber);
    } catch (IOException e) {
      System.out.println(e);
    }
    
    while (true) {
      try {
        clientSocket = serverSocket.accept();
        int i = 0;
        for (i = 0; i < maxClientsCount; i++) {
          if (threads[i] == null) {
            (threads[i] = new clientThread(clientSocket, threads)).start();
            break;  
          }
        }
        if (i == maxClientsCount) {
          PrintStream os = new PrintStream(clientSocket.getOutputStream());
          os.println("Los servidores estan ocupados, intenta mas tarde");
          os.close();
          clientSocket.close();
        }
      } catch (IOException e) {
        System.out.println(e);
      }
    }
  } 
Se que se debe a que el while esta en espera de clientes y siempre esta bajo un bucle infinito, he intentado cambiando el while a estado false, pero solo permite un cliente y no me acepta los demas, bueno espero puedan ayudarme se los agradeceria
mucho
__________________
Desbloquea esos limites...
  #2 (permalink)  
Antiguo 02/02/2018, 05:03
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Problema con While y con un servidor/cliente

Haz un proceso que se ejecute cada cierto tiempo, para no sobrecargar el servidor con la ejecución del bucle.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 02/02/2018, 14:19
 
Fecha de Ingreso: marzo-2016
Ubicación: World Wide Web
Mensajes: 30
Antigüedad: 8 años, 1 mes
Puntos: 3
Respuesta: Problema con While y con un servidor/cliente

Podrías orientarme con algún ejemplo para ver si eso me soluciona el problema, por que pienso que al ejecutarse cada cierto tiempo solo podría agregar nuevos clientes mientras dure ese lapso, igual estoy por implementar el runnable.....

Les comentare los resultados si logro hacerlo.
__________________
Desbloquea esos limites...
  #4 (permalink)  
Antiguo 02/02/2018, 15:56
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Problema con While y con un servidor/cliente

http://www.chuidiang.org/java/timer/timer.php
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #5 (permalink)  
Antiguo 02/02/2018, 23:36
 
Fecha de Ingreso: marzo-2016
Ubicación: World Wide Web
Mensajes: 30
Antigüedad: 8 años, 1 mes
Puntos: 3
Respuesta: Problema con While y con un servidor/cliente

Lo he solucionado aunque no precisamente como comentaste Fuzzylog; pasaba que al invocar el servidor y este quedar a la espera de los clientes se ejecutaba en primer plano así que basto con ejecutar la clase en segundo plano mediante un metodo run();

Asi que lo que hice fue es lo siguiente:

Código Java:
Ver original
  1. public void run(){
  2. .........
  3. try {
  4.       serverSocket = new ServerSocket(portNumber);
  5.     } catch (IOException e) {
  6.       System.out.println(e);
  7.     }
  8.    
  9.     while (true) {
  10.       try {
  11.         clientSocket = serverSocket.accept();
  12.         int i = 0;
  13.         for (i = 0; i < maxClientsCount; i++) {
  14.           if (threads[i] == null) {
  15.             (threads[i] = new clientThread(clientSocket, threads)).start();
  16.             break;  
  17.           }
  18.         }
  19.         if (i == maxClientsCount) {
  20.           PrintStream os = new PrintStream(clientSocket.getOutputStream());
  21.           os.println("Los servidores estan ocupados, intenta mas tarde");
  22.           os.close();
  23.           clientSocket.close();
  24.         }
  25.       } catch (IOException e) {
  26.         System.out.println(e);
  27.       }
  28.     }
  29.   }
  30. }

Marcare como solucionado y haré una nueva consulta
__________________
Desbloquea esos limites...

Etiquetas: bucle, ciber, cliente, control, servidor, threads
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 05:29.