Sistemas Distribuidos Finalizado Cliente / Servidor

Little Social Network

Aplicación distribuida cliente-servidor desarrollada en C++20 y Qt para simular una red social ligera con perfiles y mensajería privada. Incluye servidor multihilo con persistencia binaria, protocolo de comunicación propio y soporte para múltiples sesiones simultáneas.

Descripción General

Little Social Network es una plataforma de mensajería y red social básica construida bajo una arquitectura Cliente/Servidor orientada a objetos. El proyecto se centra en aplicar conceptos avanzados de redes, concurrencia, serialización binaria y diseño de interfaces gráficas.

El sistema permite el registro e inicio de sesión de usuarios, administración de perfiles personales y mensajería privada en tiempo real mediante conexiones de red sockets persistentes.

Arquitectura y Componentes

Servidor Concurrente (Multithreading)

Gestor centralizado responsable de la lógica de negocio y estado del sistema.

  • Atención concurrente de múltiples clientes en paralelo mediante hilos.
  • Persistencia de datos: Almacenamiento eficiente de cuentas, perfiles y mensajes en archivos binarios.
  • Manejo de sincronización mediante primitivas de control de concurrencia.

Cliente Gráfico (Qt GUI)

Interfaz gráfica intuitiva desarrollada con el framework Qt para la interacción del usuario.

  • Vistas dinámicas para autenticación (Login/Register), lista de contactos y chat activo.
  • Comunicación asíncrona mediante hilos secundarios para mantener la fluidez de la UI.

Capa de Red y Protocolo Personalizado

Sistema de intercambio de datos sobre Sockets TCP/IP.

  • Serialización binaria: Empaquetado de estructuras complejas (paquetes) para transmisión optimizada por red.
  • Protocolo orientado a eventos con tipado explícito de payloads (solicitud de chat, autenticación, estado).

Aspectos Técnicos y Deuda Técnica

Serialización Manual vs. Estándar: El protocolo binario implementado a mano permitió entender a fondo la manipulación de bytes en red. En proyectos de mayor escala, una refactorización idónea sería adoptar librerías estándar como Protocol Buffers (Protobuf) o FlatBuffers para simplificar el mantenimiento.

Escalabilidad del Almacenamiento: La persistencia actual en archivos binarios a medida demuestra el uso de Streams de E/S en C++, pero escalar hacia un motor de base de datos relacional (como SQLite o PostgreSQL) aportaría transaccionalidad ACID y soporte para consultas complejas.