Sala de chat en C para 100 usuarios.

06 de Diciembre de 2019

Dificultad
Conocimiento de C 75%
baner-chat-100

Descargar proyecto completo

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 continuacion en la siguiente parte del tutorial empezaremos con el codigo del cliente. 

Descargar proyecto completo

Otros Posts: