Este repositorio contiene la implementación de una arquitectura Cliente-Servidor diseñada para la asignatura de Programación Concurrente. El objetivo principal del proyecto es gestionar la comunicación y el acceso a recursos compartidos entre múltiples clientes simultáneos, aplicando diversas estrategias de sincronización y exclusión mutua de forma manual y mediante librerías de Java.
Es un proyecto hecho en parejas, con mi compañero Daniel Casquero Palencia.
El sistema permite el intercambio de información mediante el paso de mensajes, en este caso, recetas de usuarios ficticios, utilizando Sockets TCP. El servidor es capaz de atender múltiples peticiones concurrentes asegurando la integridad de los datos y evitando condiciones de carrera.
- Lenguaje: Java.
- Comunicación: Sockets (TCP/IP).
- Modelo: Cliente-Servidor Multihilo.
- Protocolo de Comunicación: Objetos serializados personalizados (ver paquete
mensaje).
Para garantizar la seguridad en el acceso a las secciones críticas, se han implementado y comparado diferentes mecanismos de sincronización:
- Locks: Implementación de algoritmos clásicos de exclusión mutua (ej. Bakery Algorithm).
- Semáforos: Implementación de semáforos binarios y contadores para la gestión de recursos limitados.
- Monitores: Uso de bloques
synchronizedy mecanismoswait/notifyde Java. - Gestión de Hilos: Uso de
ThreadyRunnablepara la atención individualizada de clientes.
El código fuente se organiza en la carpeta src siguiendo una estructura modular:
src/servidor: Contiene la lógica del servidor, elServerSockety los handlers para los hilos de cada cliente.src/cliente: Interfaz y lógica de conexión para el usuario.src/mensaje: Definición del protocolo de comunicación. Contiene las clases de los diferentes tipos de mensajes (Login, Petición, Confirmación, etc.).src/baseDatos: Gestión de la persistencia de datos (lectura/escritura de archivos).src/usuario: Modelado de la entidad usuario.
Este proyecto está bajo la Licencia MIT - mirar el archivo LICENSE para más detalles.
Autores:
- [Luis Orofino Álvarez]
- [Daniel Casquero Palencia]