Omitir navegación.
Inicio

Servidor de Chat con Hilos

Imagen de SebaMinguez

Servidor.java

import java.util.ArrayList;
import java.net.ServerSocket;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
 
public class Servidor {
        public static ArrayList<Socket> cliente = new ArrayList<Socket>();
        public static void main (String [] args) {
                ServerSocket servidor;
				try {
					servidor = new ServerSocket(4000);
					HiloEscuchaLlegadaCliente h = new HiloEscuchaLlegadaCliente(servidor);
	                h.start();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
        }
        public static void enviar(String m) {
                PrintStream p;
                for(Socket temp:cliente){
                        try {
							p = new PrintStream (temp.getOutputStream());
							p.println(m);
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
                }
        }
}

HiloEscuchaLlegadaCliente.java

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
 
public class HiloEscuchaLlegadaCliente extends Thread {
        ServerSocket servidor;
        public HiloEscuchaLlegadaCliente (ServerSocket servidor) {
                this.servidor = servidor;
        }
        public void run(){
                Socket s;
                while(true){
                        try {
							s = servidor.accept();
							Servidor.cliente.add(s);
	                        HiloEscuchaCliente h = new HiloEscuchaCliente(s);
	                        h.start();
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
                }
        }
}

HiloEscuchaCliente.java

import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
 
public class HiloEscuchaCliente extends Thread {
        Socket s;
        public HiloEscuchaCliente(Socket s){
                this.s = s;
        }
        public void run () {
                Scanner a;
				try {
					a = new Scanner(s.getInputStream());
					while(true){
                        Servidor.enviar(a.nextLine());
					}
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
 
        }
}

Ahora el cliente para el chat Cliente.java

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
 
public class Cliente {
	public static void main(String [] args){
		try {
			Socket s = new Socket("127.0.0.1", 4000);
			HiloEscucha h = new HiloEscucha (s, "Cliente");
			h.start();
			Scanner a = new Scanner (System.in);
			PrintStream p;
 
			p = new PrintStream(s.getOutputStream());
			while(true){
				System.out.println("Yo: ");
				p.println(a.nextLine());
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

HiloEscucha.java

import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
 
 
public class HiloEscucha extends Thread {
	Socket s; // El que se crea al establecer la conexión
	String m; //Donde escucha el hilo
	public HiloEscucha (Socket s, String m) {
		this.m = m;
		this.s = s;
	}
	public void run (){
		Scanner a;
		try {
			a = new Scanner(s.getInputStream());
			while(true){
				System.out.println(m+"dice: "+a.nextLine());
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Trackback URL for "Servidor de Chat con Hilos"

http://www.odiolasllaves.com.ar/trackback/105

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de gvitola

gracias por subir la info

suelo copiar todo al revés.. me vienen muy bien tus aportes muchas veces. se agradece. un abrazo.

Imagen de SebaMinguez

Me alegro que sirva. Mi idea

Me alegro que sirva. Mi idea original era hacer algo mas comentado, pero por lo general no me hago el tiempo.

En teoría cualquier usuario registrado puede editar la documentación, sientanse libres de agregar o modificar.

Cualquier otra sugerencia en cuanto al contenido o funcionalidad es bien recibida.

Gracias por comentar, es grato ver que a alguien le sirve