
Para este tutorial estaremos implementando una sala de chat de consola, para hasta 100 usuarios. El alcance de este proyecto permitirá desde una computadora local conectar varias terminales a modo de una sala de chat. El sistema de archivos será el siguiente:
Vamos a tener una librería sencilla con funciones comunes y luego tendremos un código para el servidor y otro código para los clientes; si no sabes como crear una librería te invito a ver este tutorial donde enseño a crear una.
La comunicación entre los clientes se realiza a través del servidor que funcionara como broker de mensajes, reenviando los mensajes de un cliente a los restantes que estén conectados a la sala de chat.
Requisitos:
- Sistema operativo Linux.
- Tener conocimientos del lenguaje C.
Antes de empezar a escribir código, definimos un esquema sobre cómo funcionará la sala de chat.
Funcionamiento:
- Del lado del servidor, tenemos un socket conectado a un puerto de la máquina que constantemente está escuchando los usuarios que se conectan al servidor.
- Una vez se conecte un usuario, este proceso toma los datos del usuario como el nombre y los guarda en una estructura, esta estructura tiene la dirección del usuario, el socket por el que se conectó, un ID y el nombre.
typedef struct { struct sockaddr_in address; int sock; int uid; char name[32]; } client_t;
- Una vez guardado todos estos datos, el proceso pasa a guardar al usuario en una cola y crea un hilo hijo del proceso principal, este hilo llama a la función “client_handler” que se encarga de recibir todos sus mensajes.
- Del lado del cliente, una vez se conecta al servidor, este crea dos hilos, uno emisor para enviar mensajes al servidor y uno receptor para recibir los mensajes de los demás usuarios una vez pasen por el servidor.
- Si cualquiera de estos pasos falla el algoritmo llama a una función dentro de la librería “commons.h” que mata el proceso con una señal de “EXIT_FAILURE”, indicando que el proceso ha fallado.
- La sala de chat será capaz de indicar cuando un usuario se conecta y cuando se desconecta.
A continuación en la siguiente parte del tutorial empezaremos con el código del cliente.