<file_sep>import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class LanzadorCliente {
	
	private static InputStreamReader isr = new InputStreamReader(System.in);
	private static BufferedReader teclado = new BufferedReader(isr);

	public static void main(String[] args) {

		System.out.println("Introduce tu nombre de usuario:");
		String nombre="";
		try {
			nombre = teclado.readLine();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("Hola " + nombre + ", Bienvenido al chat");
		
		ClienteEscribir c1 = new ClienteEscribir("localhost", 5000, nombre);
		ClienteLeer c2 = new ClienteLeer("localhost", 5000, nombre);

		Thread t1 = new Thread(c1);
		Thread t2 = new Thread(c2);
		
		t1.start();
		t2.start();
		
	}

}
<file_sep>
import java.net.*;
import java.io.*;

public class ServerThread extends Thread {
	protected Socket clientSocket;
	private String nombreCliente;

	public ServerThread(Socket clientSoc) {
		clientSocket = clientSoc;
	}

	
	public void run() {
		System.out.println("Iniciando hilo......");

		try {
			PrintWriter respuesta = new PrintWriter(clientSocket.getOutputStream(),true);
			BufferedReader lectura = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

			String inputLine = "";
			
			while ((inputLine = lectura.readLine()) != null) {
				
				try {
					
					synchronized (Servidor.listaClientes) {
						
						//Respondo a todos los clientes
						for (int i = 0; i < Servidor.listaClientes.size(); i++) {
							if (!Servidor.listaClientes.get(i).getClientSocket().isClosed()) {
								
								respuesta = new PrintWriter(Servidor.listaClientes.get(i).getClientSocket().getOutputStream(), true);
								respuesta.println(inputLine);
							
							}
						}//End for
						
						//Elimino clientes desconectados
						for (int i = 0; i < Servidor.listaClientes.size(); i++) {
							if (Servidor.listaClientes.get(i).getClientSocket().isClosed())
								Servidor.listaClientes.remove(i);
						}//End for
						
						
						
					}
				} catch (Exception e) {
					
					e.printStackTrace();
				}

				System.out.println("Server: " + inputLine);
				
				if (inputLine.substring(inputLine.indexOf(':') + 2).equals("Bye.")) 
				{
					System.out.println("Cerrando cliente");
					Thread.interrupted();
					Servidor.listaClientes.remove(this);
				}//End if
			}//End while
			
			respuesta.close();
			lectura.close();
			clientSocket.close();

		} catch (IOException e) {
			System.out.println("Algún cliente se ha desconectado del servidor");
		
		}
	}
	
	
	


	public void setNombreCliente(String nombreCliente) {
		this.nombreCliente = nombreCliente;
	}


	public String getNombreCliente() {
		return nombreCliente;
	}
	
	
	
	public Socket getClientSocket() {
		return clientSocket;
	}

	public void setClientSocket(Socket clientSocket) {
		this.clientSocket = clientSocket;
	}

}<file_sep>import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;


public class ClienteEscribir implements Runnable {
	private static InputStreamReader isr = new InputStreamReader(System.in);
	private static BufferedReader teclado = new BufferedReader(isr);

	private String serverHostname = new String("localhost");
	private int port = 5000;
	private String nombre = "";

	public ClienteEscribir(String serverHostname, int port, String nombre) {
		super();
		this.serverHostname = serverHostname;
		this.port = port;
		this.nombre = nombre;
	}

	public ClienteEscribir() {
	}

	@Override
	public void run() {
		
		
		System.out.println("Intentando conexión del cliente " + nombre + " al servidor" + serverHostname + " en puerto " + port);

		Socket s = null;
		PrintWriter pw = null;
		String texto="" ;
		
		try {
			s = new Socket(serverHostname, 5000);
			pw = new PrintWriter(s.getOutputStream(), true);

		} catch (UnknownHostException e) {
			System.err.println("No conozco el servidor: " + serverHostname);
			System.exit(1);
		} catch (IOException e) {
			System.err.println("No consigo entrar " + "al servidor "+ serverHostname);
			System.exit(1);
		}

		
		System.out.println("Conectado al servidor. Escribe \"Bye.\" para desconectarte");
		boolean flag=true;
		while(flag) {
			
			try {
				texto = teclado.readLine();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			if (texto.equals("Bye.")) {
				pw.println(nombre + ": " + texto);
				System.out.println("DESCONECTO DEL SERVIDOR, CIERRO EL CHAT");
				flag=false;
				Thread.interrupted();
				
			}
			
			if(texto!="")
			pw.println(nombre + ": " + texto);
		} 
	}

}
