Tarea 4: Chat en Java

Nombre: ChatServer, ChatClient: Servidor y cliente para establecer un sistema de chat simple en Java

Sintaxis:
ChatServer <puerto_listen>
ChatClient <Usuario> <server> <puerto_server>

Descripción

El sistema pedido se compone de dos programas para ofrecer un sistema simple de "Chateo" . ChatServer es el servidor que recibe las conexiones de los clientes y establece comunicación entre ellos. ChatServer  acepta conexiones y distribuye entre todos los conectados toda información que a él llegue. La relación de orden vista por cada cliente debe ser preservada; es decir, todos los clientes recibirán los mensajes de los otros "chateros" en le mismo orden.
ChatClient es el cliente Java del sistema. Dispone de una interfaz gráfica con dos zonas de texto. Una superior para ingresar los textos a enviar al chat y una inferior donde los mensajes recibidos son desplegados.

Chat Client

ChatClient tiene tres argumentos: el primero representa el nombre del usuario a ser desplegado como prefijo de cada uno de sus mensajes, luego viene el nombre o IP del host donde se encuentra el servidor, y finalmente el puerto donde el Servidor Chat reside.

Nota: Revise y estudie el ejemplo visto en clases para un servidor múltiple en Java. Recomiendo que usted cree una clase llamada Distribuidor. Esta clase tiene como atributo la lista de todos los clientes que se han conectado al chat (usando ArrayList por ejemplo). Además Distribuir contiene un método para enviar un mensaje a cada uno de los clientes conectados. Este método puede ser sincronizado (Para qué?).  Cada hilo del  servidor debería tener una referencia a Distribuidor, de modo que luego de recibir  un mensaje a través de una conexión, Distribuir lo envía a todas las conexiones activas. Para el ChatClient considere una mirada a la clase JTextField.

Qué entregar?  En esta tarea usted deberá entregar: Un Readme, el makefile, los programas fuente, y la documentación generada en por javadoc a partir de los rótulos que usted incorporará en su texto.