C/C++
Crea tu propio chat – Cliente
Con este artículo termina la serie de artículos en las que describimos los principios básicos que hay que tener en cuenta para realizar un chat y en los que también se describe como hacer una pequeña aproximación a uno de estos programas que a muchos de nosotros nos acompañan en nuestro día a día.
En el artículo de hoy vamos a tratar el único tema que nos falta, el cual es el programa cliente que nos servirá a los usuarios para comunicarnos con el servidor y así, poder comunicarnos con el resto de usuarios que se encuentren conectados en un momento dado.
Si bien el cliente se basta de un sólo ejecutable, hoy vamos a tratar dicho ejecutable y otro que nos permita, mediante la redirección de descriptores de ficheros, añadirle una interfaz gráfica sencilla.
cli.c
Nos encontramos ante uno de los ficheros con la lógica esencial del cliente del chat, vamos a analizarlo paso a paso:
#include <stdio.h> #include <stdlib.h> // librería para manejo de strings #include <string.h> // librería para el uso de los sockets y las correspondientes constantes #include <sys/socket.h> // librería para el uso de la constante IPPROTO_TCP, in_addr, ... #include <netinet/in.h> // librería que nos permite hacer uso de la variable errno #include <errno.h> // librería de base de datos de red #include <netdb.h> // librería para el uso de primitivas unix #include <unistd.h> // librería para obtener acceso a variables como pid #include <sys/types.h> // librería para el manejo de señales #include <signal.h> // librería para mostrar la traza del programa #include "trace.h" // librería para gestionar los paquetes enviados y recibidos #include "sms.h" // librería con las flags que utilizaremos #include "flags.h" // incuimos la librería de tipos de datos #include "type.h" // incuimos la librería de herramientas para los echo #include "tools.h" // incluimos las librerías que nos permitirán hacer uso de SSL #include "ssl.h" #define DIM 1024 // definimos el tamaño de los array de textos #define READ STDIN_FILENO #define WRITE STDOUT_FILENO
Incluimos los archivos de cabecera o librerías necesarias para la ejecución del chat y realizamos las definiciones de tamaños, y ya puestos, definimos los descriptores de ficheros de entrada y salida con el nombre de las constantes genéricas en lugar de utilizar los números 0 para lectura y 1 para escritura.