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

Chat en Java para 5 clientes

Estas en el tema de Chat en Java para 5 clientes en el foro de Java en Foros del Web. Hola soy un poco nueva en ésto. Tenemos que implementar un chat en Java para 5 clientes. Por ahora lo que he conseguido es que ...
  #1 (permalink)  
Antiguo 02/03/2014, 12:49
 
Fecha de Ingreso: octubre-2010
Ubicación: Madrid
Mensajes: 295
Antigüedad: 13 años, 6 meses
Puntos: 12
Chat en Java para 5 clientes

Hola soy un poco nueva en ésto. Tenemos que implementar un chat en Java para 5 clientes. Por ahora lo que he conseguido es que el servidor hable con el cliente todo lo que quiera. Tengo un server_main en el que cada vez que se conecta un cliente se crea un Server_Thread que es el que "habla" con el cliente. Es decir por cada Cliente que instancio se instancia un Server_Thread.

Lo que no sé es cómo conseguir que el mensaje que manda un cliente se envíe al resto. Supongo que tengo que tener un arraylist de Server_Thread? la verdad que he intentado mogollón de cosas y no sé por donde cogerlo. Os dejo las clases.

Hay un lanzador del Server que lo único que hace es instanciar un Server_Main y arrancarlo y un Lanzador de Cliente que instancia el cliente.
y luego

SERVER_MAIN
Código Java:
Ver original
  1. import java.net.*;
  2. import java.util.ArrayList;
  3. import java.io.*;
  4.  
  5.  
  6. //Clase con los atributos, constructores del Socket, server, etc.
  7. public class Server_Main {
  8.     protected Socket clientSocket;
  9.     private ServerSocket serverSocket = null;
  10.     private int port = 5000;
  11.    
  12.     public static ArrayList<Server_Thread> clientes = new ArrayList<Server_Thread>(); ;
  13.  
  14.     public Server_Main() {
  15.  
  16.     }
  17.  
  18.     public Server_Main(int port) {
  19.         this.port = port;
  20.     }
  21.  
  22.     public void strart() throws IOException {
  23.         System.out.println("inicio del socket");
  24.         this.serverSocket = new ServerSocket(port);
  25.         LazadorClientesEnThread();
  26.     }
  27.  
  28.     public int strart1() {
  29.         System.out.println("inicio del socket");
  30.         try {
  31.             this.serverSocket = new ServerSocket(port);
  32.             LazadorClientesEnThread();
  33.             return 1;
  34.         } catch (SocketException e) {
  35.             return 0;
  36.         } catch (IOException e) {
  37.             System.err.println("Could not listen on port:" + port);
  38.             System.exit(1);
  39.         }
  40.         return -1;
  41.     }
  42.  
  43.     public void LazadorClientesEnThread() {
  44.         try {
  45.             while (true) {
  46.                 System.out.println("llega una nueva conexion");
  47.                 Server_Thread temp = new Server_Thread(serverSocket.accept());
  48.                 clientes.add(temp);
  49.                 temp.start();
  50.             }
  51.         } catch (IOException e) {
  52.             System.err.println("Accept failed.");
  53.             System.exit(1);
  54.         }
  55.     }
  56.  
  57.     public void STOP() throws IOException {
  58.         System.out.println("Fin del socket");
  59.         try {
  60.             serverSocket.close();
  61.         } catch (IOException e) {
  62.             System.err.println("Could not listen on port:" + port);
  63.             System.exit(1);
  64.         }
  65.     }
  66. }

Continuo en otro post
  #2 (permalink)  
Antiguo 02/03/2014, 12:51
 
Fecha de Ingreso: octubre-2010
Ubicación: Madrid
Mensajes: 295
Antigüedad: 13 años, 6 meses
Puntos: 12
Respuesta: Chat en Java para 5 clientes

SERVER_THREAD
Código Java:
Ver original
  1. import java.net.*;
  2. import java.io.*;
  3.  
  4. public class Server_Thread extends Thread {
  5.     protected Socket clientSocket;
  6.  
  7.     public Server_Thread(Socket clientSoc) {
  8.         clientSocket = clientSoc;
  9.     }
  10.  
  11.     public void run() {
  12.         System.out.println("Iniciando hilo......");
  13.  
  14.         try {
  15.             PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),
  16.                     true);
  17.             BufferedReader in = new BufferedReader(new InputStreamReader(
  18.                     clientSocket.getInputStream()));
  19.  
  20.             String inputLine;
  21.             String nombreReceptor;
  22.  
  23.             //recoge lo que ha recibido y lo devuelvo al mismo hilo
  24.             while ((inputLine = in.readLine()) != null) {  
  25.                
  26.                
  27.                 //nombreReceptor =
  28.                 System.out.println("Server: " + inputLine);
  29.                 // para hacer ECHO, le envio lo que he recibido
  30.                 out.println("ECHO:"+ clientSocket.getPort() + inputLine);
  31.  
  32.                 if (inputLine.equals("Bye."))
  33.                     break;
  34.             }
  35.  
  36.             out.close();
  37.             in.close();
  38.             clientSocket.close();
  39.  
  40.         } catch (IOException e) {
  41.             System.err.println("Problem with Communication Server");
  42.             System.exit(1);
  43.         }
  44.     }
  45. }

CLIENTE

Código Java:
Ver original
  1. import java.io.*;
  2. import java.net.*;
  3. import java.util.Scanner;
  4.  
  5. public class Cliente implements Runnable {
  6.     private static Scanner teclado = new Scanner(System.in);
  7.  
  8.     private String serverHostname = new String("127.0.0.1");
  9.     private int port = 5000;
  10.     private String nombre = "clienteSinNombre";
  11.  
  12.     public Cliente(String serverHostname, int port, String nombre) {
  13.         super();
  14.         this.serverHostname = serverHostname;
  15.         this.port = port;
  16.         this.nombre = nombre;
  17.     }
  18.  
  19.     public Cliente() {
  20.     }
  21.  
  22.     public void run() {
  23.         String nombreReceptor = "";
  24.  
  25.         System.out.println("Intentando conexión del cliente " + nombre
  26.                 + " al servidor" + serverHostname + " en puerto " + port);
  27.  
  28.         Socket echoSocket = null;
  29.         PrintWriter out = null;
  30.         BufferedReader in = null;
  31.  
  32.         try {
  33.             echoSocket = new Socket(serverHostname, 5000);
  34.  
  35.             out = new PrintWriter(echoSocket.getOutputStream(), true);
  36.             in = new BufferedReader(new InputStreamReader(
  37.                     echoSocket.getInputStream()));
  38.  
  39.         } catch (UnknownHostException e) {
  40.             System.err.println("No conozco el servidor: " + serverHostname);
  41.             System.exit(1);
  42.         } catch (IOException e) {
  43.             System.err.println("No consigo entrar " + "al servidor "
  44.                     + serverHostname);
  45.             System.exit(1);
  46.         }
  47.  
  48.         String userInput = "";
  49.        
  50.         System.out.println("¿Con quien te quieres comunicar?");
  51.         nombreReceptor = teclado.next();
  52.  
  53.         try {
  54.             do{
  55.                 // recoge el mensaje que escribe el cliente
  56.                 System.out.println("Escribe:");
  57.                 userInput = teclado.nextLine();
  58.                 out.println(nombreReceptor + "@" + userInput); // lo envía al servidor
  59.  
  60.                 // end loop
  61.                 if (userInput.equals("Bye."))
  62.                     break;
  63.  
  64.                 System.out.println("echo: " + in.readLine());
  65.             }while (true);
  66.         } catch (IOException e) {
  67.             // TODO Auto-generated catch block
  68.             e.printStackTrace();
  69.         }
  70.  
  71.         out.close();
  72.         try {
  73.             in.close();
  74.             // stdIn.close();
  75.             echoSocket.close();
  76.         } catch (IOException e) {
  77.             // TODO Auto-generated catch block
  78.             e.printStackTrace();
  79.         }
  80.  
  81.     }
  82. }


Solo tiene que funcionar en CONSOLE de Eclipse no tiene que tener interfaz

Etiquetas: chat, clase
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 04:09.