Vistas: 617
Tiempo de lectura:1 Minutos, 55 Segundos

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.

arquitectura-sala-chat
Diagrama de bloques

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.