Ver Mensaje Individual
  #6 (permalink)  
Antiguo 24/09/2014, 03:22
Avatar de Profesor_Falken
Profesor_Falken
 
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 4 meses
Puntos: 182
Respuesta: Sockets Multicliente

Solo te falta aplicar esto:

Para poder eliminar clientes, deberas pasar el servidor al constructor de ClienteEscucha y cuando este termine de ejecutar el run() hacer una llamada para eliminarlo de la lista.

Para enviar los mensajes bastara un metodo que recorra la lista de ClienteEscucha y llame un metodo de este que escriba un mensaje.


Te lo pongo sobre lo tuyo. Revisalo porque lo he puesto aqui directamente y lo mismo hay algo que no compila:

Código Java:
Ver original
  1. public class MultiEchoServer
  2. {
  3.     private static ServerSocket ServidorSocket;
  4.     private static final int Puerto = 1121;
  5.     private List<ClienteEscucha> listaclientes = new ArrayList<ClienteEscucha>();
  6.    
  7.     public static void main(String[] args) throws IOException{
  8.         MultiEchoServer server = new MultiEchoServer();
  9.         try{ ServidorSocket = new ServerSocket(Puerto); }
  10.         catch (IOException e){
  11.             System.out.println("No se puede establecer conexion con el puerto!\n");
  12.             System.exit(1);
  13.         }
  14.  
  15.         do{
  16.             //En espera de un nuevo cliente
  17.             Socket cliente = ServidorSocket.accept();
  18.            
  19.             System.out.println("Nuevo cliente aceptado.\n");
  20.            
  21.             ClienteEscucha escucha = new ClienteEscucha(cliente, server);
  22.             escucha.start();
  23.            
  24.             server.addClient(escucha );
  25.            
  26.         }while (true);
  27.     }
  28.  
  29.     public void addClient(ClienteEscucha clienteEscucha) {
  30.        listaclientes.add(clienteEscucha);
  31.     }
  32.  
  33.     public void removeClient(ClienteEscucha clienteEscucha) {
  34.        listaclientes.remove(clienteEscucha);
  35.     }
  36.  
  37.     //Este metodo lo llamas cuando quieras enviar un mensaje a todos
  38.     public void sendToAnyone(String message) {
  39.  
  40.         for (ClienteEscucha connection : listaclientes) {
  41.             connection.sendMessage(message);
  42.         }
  43.     }
  44. }
  45.  
  46. class ClienteEscucha extends Thread{
  47.     private Socket cliente;
  48.     private BufferedReader entrada;
  49.     private PrintWriter salida;
  50.     private MultiEchoServer server;
  51.    
  52.     public ClienteEscucha(Socket socket, MultiEchoServer server){
  53.         cliente = socket;
  54.         this.server = server;
  55.  
  56.         try{
  57.             entrada = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
  58.             salida = new PrintWriter(cliente.getOutputStream(),true);
  59.         }
  60.         catch(IOException e){
  61.             e.printStackTrace();
  62.         }
  63.     }
  64.  
  65.     public void run()
  66.     {
  67.         try{
  68.             String recibido;
  69.            
  70.             do{
  71.                
  72.                 recibido = entrada.readLine();
  73.                
  74.                 salida.println(recibido);
  75.  
  76.             }while (!recibido.equals("QUITAR"));
  77.         }
  78.  
  79.         catch(IOException e){
  80.             e.printStackTrace();
  81.         }
  82.        
  83.         finally{
  84.             try{
  85.                 if (cliente!=null){
  86.                     System.out.println("Cerrando la conexion del servidor...\n");
  87.                     cliente.close();
  88.                 }
  89.                 server.removeClient(this);
  90.             }
  91.             catch(IOException e){
  92.                 e.printStackTrace();
  93.             }
  94.         }
  95.     }
  96.    
  97.     protected void sendMessage(String message) {
  98.         salida.println(message);
  99.     }
  100.  
  101. }

Creo que esta todo.


Un saludo

Última edición por Profesor_Falken; 24/09/2014 a las 05:14