ELO-330: Programación de Sistemas
Tarea 3: Mi Chat

Nombre: mcs: Mi Chat Server, Servidor chat basado en hilos
                 mcc: Mi Chat Client, cliente chat basado en hilos o no

Sintaxis: mcs [puerto]
puerto: es opcional; si no se pone, el sistema asignará.

                mcc [máquina servidora] [puerto]
máquina servidora: Máquina donde corre mcs
puerto: puerto asociado al servicio mcs.

Descripción
    mcs es el servidor chat que correrá centralizadamente para atender este sistema simple de chat. Una vez ejecutado, reportará por consola el número de puerto donde recibirá los requerimientos. mcs hace uso de protocolo TCP. Para terminar mcs se debe enviar Control-C o una señal de término.
    mcc es el cliente a correr por cada usuario para vincularse con sus pares. Al ejecutar mcc, éste se conecta al servidor y envía el "user name" de quien lo corre. Luego envía por la conexión cada línea que el usuario ingrese por teclado. En respuesta, el usuario recibe cada línea precedida por "user name:" y luego el texto de la línea ingresada. Notar que cada cliente mcc envía una línea por vez, pero recibe las líneas de todos los otros usuarios conectados al servidor.
  Un cliente mcc concluye cuando el usuario presiona Control-C. Esta situación no debe crear problemas en el servidor, los demás usuarios siguen en su chateo.

Observaciones
   No se preocupe por el traslape de texto que usted está imprimiendo con aquel que usted recibe de los demás. Sí debe preocuparse porque dos líneas texto de usuarios no se traslapen entre si al mostrarse.
  mcs puede estar implementado con hilos. Un hilo para atender cada conexión de cliente. Además puede manejar una cola donde cada hilo receptor puede escribir los mensajes recibidos, para luego ser leídos por otro hilo que lee desde esta cola y los envía a cada cliente. Usted puede optar por otras arquitecturas.

Ver llamado getpwuid (o getlogin no tan bueno).