Minitalk implementa un sistema de comunicación entre un cliente y un servidor utilizando señales de 'UNIX' (SIGUSR1 y SIGUSR2). El cliente envía mensajes al servidor bit a bit, codificando los caracteres en señales, mientras que el servidor decodifica estos mensajes y los muestra en la salida estándar.
La comunicación en Minitalk se basa en señales de UNIX para enviar datos entre procesos.
SIGUSR1= bit 0SIGUSR2= bit 1
Se utilizan para transmitir información binaria bit a bit.
signal() Simple, pero limitado.
sigaction() Más robusto y seguro, recomendado para gestionar múltiples señales de forma eficiente.
Las señales pueden llegar en cualquier momento, por lo que el servidor debe estar siempre listo para recibirlas sin bloquear su ejecución.
El cliente convierte cada carácter en 8 bits y los envía usando señales. El servidor reconstruye los bits en caracteres y muestra el mensaje.
Se usa usleep() para evitar pérdidas de señales. Opcionalmente, se puede implementar un ACK para confirmar la recepción de datos.
Se mitigan usando sigaction() con configuraciones adecuadas para manejar señales rápidamente sin errores.
Los siguientes comandos deben ser ejecutados en la terminal, dentro del directorio de tu proyecto:
make all: Compila el proyecto y genera los ejecutablesclientyservermake clean: Elimina los archivos objeto (.o) generados durante la compilación.make fclean: Ejecuta el comandocleany, además, elimina el ejecutablepipex.make re: Ejecuta los comandosfcleanyall, recompilando todo el proyecto desde cero.
Una vez generado los archivos, para probar la comunicación etre cliente y servidor primero deberás de ejecutar el servidor, este te mostrará el PID del mismo lo que permitirá posteriormente su comunicación.
./server
SERVER_PID: 354495Posteriormente en otra terminal, ejecutaremos el cliente seguido del PID que devuelve el servidor y de un mensaje que se le va a mandar.
./client 354495 "Hello Server"Si todo ha ido bien se mostrará el mensaje en la terminal del servidor y en la del cliente un mensaje de confirmación predeterminado.
./server
SERVER_PID: 354495
Hello Server./client 354495 "Hello Server"
✅ Message received ✅En este proyecto, la ejecución del cliente fallará en caso de que no se le pasen los comandos correctamente al cliente, así como el PID del servidor no corresponda a un proceso de ejecución.
./client <server_pid> "message_to_send"Puedes ajustar las opciones de compilación en el Makefile según tus necesidades específicas.