Repository navigation
Releases: SebaJuarez/ComunicacionTCP
Release list
Hit #7
🚀 Release: Implementación del Sistema de Inscripciones en Ventanas de Tiempo
📌 Descripción
En esta versión, se ha agregado un sistema de inscripciones en las ventanas de tiempo, coordinado por el nodo D (Registro de Contactos). Ahora, los nodos C (Clientes TCP) deben registrarse en una ventana futura y solo pueden ver a los nodos C activos en la ventana actual.
Cada N segundos, el nodo D actualiza las ventanas, moviendo los registros de la inscripción futura a la ventana activa.
Además, se ha incorporado persistencia en JSON, facilitando el seguimiento ordenado de las inscripciones y permitiendo verificar los resultados esperados.
🔧 Funcionamiento
Nodo D (Registro de Contactos con Inscripciones)
- Mantiene dos registros:
- Nodos activos en la ventana actual.
- Nodos registrados para la próxima ventana.
- Cada N segundos, mueve los registros de la inscripción futura a la actual y habilita una nueva ventana de inscripciones.
- Almacena las inscripciones en un archivo JSON (
logs-registros/inscripciones.json).
Nodo C (Cliente TCP)
- Se registra en D y espera hasta la próxima ventana para ser activado.
- Solo puede conocer a los nodos activos en la ventana actual.
- Se conecta a los nodos activos y establece comunicación con ellos.
✅ Cambios en el Programa
📌 Registro de Contactos (RegistroContactos)
- Implementa la lógica de las ventanas de tiempo y manejo de inscripciones.
- Guarda el registro de inscripciones en JSON para mantener un historial ordenado.
- Permite a los nodos C consultar la lista de inscripciones activas.
📌 Persistencia de Inscripciones (PersistenciaRegistroVentanas)
- Se encarga de la lectura y escritura del archivo JSON con los registros de cada ventana.
- Crea el directorio de logs (
logs-registros/) si no existe. - Permite almacenar múltiples ventanas en un historial ordenado.
📌 Gestión de Ventanas (GestorInscripciones)
- Mantiene dos estructuras:
- inscripcionesActuales: nodos activos en la ventana en curso.
- inscripcionesFuturas: nodos registrados para la próxima ventana.
- Cada N segundos, mueve los nodos de inscripcionesFuturas a inscripcionesActuales y guarda el estado en JSON.
- Permite a los nodos C registrarse de forma sincronizada.
▶️ Instrucciones de Uso
Para testear, ejecutar el archivo Bash "test_hit7.sh" que se encuentran en /src/scripts.
Ejemplo de ejecución:
/bin/bash /ComunicacionTCP/src/scripts/test_hit7.shHit #6
🚀 Release: Incorporación de Registro de Contactos en la Comunicación TCP
📌 Descripción
En esta versión, se ha incorporado un nuevo tipo de nodo denominado Registro de Contactos (D), que actúa como un registro centralizado para gestionar la comunicación entre múltiples instancias del programa C.
El nodo D mantiene una lista de los nodos C en ejecución y proporciona la información de contacto de estos a cualquier nueva instancia de C que se registre. De este modo, las instancias de C pueden establecer comunicación entre ellas sin necesidad de conocer de antemano las direcciones IP de sus pares.
🔧 Funcionamiento
-
Nodo D (Registro de Contactos):
- Escucha en un puerto fijo.
- Almacena en memoria la información de los nodos C registrados (IP y puerto).
- Responde a los nodos C con la lista actualizada de nodos conectados.
-
Nodo C (Cliente TCP):
- Recibe por parámetros la IP y el puerto del nodo D.
- Escoge un puerto aleatorio para la escucha.
- Se comunica con D para registrarse y recibir la lista de nodos activos.
- Se conecta a cada nodo C registrado y les envía un saludo.
✅ Cambios en el Programa
📌 Registro de Contactos (RegistroContactos)
- Se ha creado una nueva clase que actúa como registro central de nodos.
- Usa un array en RAM para mantener la información de los nodos activos.
- Al recibir una solicitud de un nodo C, lo registra y responde con la lista de nodos conectados.
📌 Cliente (C)
- Ahora solo recibe la IP y el puerto del nodo D al iniciar.
- Genera un puerto de escucha aleatorio.
- Se registra en D y recibe la lista de nodos activos.
- Se conecta a cada nodo de la lista y envía un saludo.
- Permite la conexión y comunicación con múltiples nodos C.
▶️ Instrucciones de Uso
Para probar la funcionalidad, ejecutar el entorno con Docker Compose.
Ejemplo de ejecución:
docker-compose up --buildHit #5
Hit #5
🚀 Release: Envío de Mensajes en Formato JSON
📌 Descripción
En esta versión, se ha modificado el programa para que los mensajes se envíen en formato JSON. Ahora, cada mensaje es serializado antes de enviarse y deserializado al recibirse, asegurando una comunicación estructurada y más flexible entre los nodos.
✅ Cambios en el Programa (ClienteServidorTCP)
- Serialización y deserialización: Implementación de la conversión de mensajes a JSON antes de enviarlos y su posterior reconstrucción al recibirlos.
- Estandarización del formato de mensajes: Cada mensaje enviado ahora sigue un esquema JSON, facilitando su interpretación.
▶️ Instrucciones de Uso
Para probar la funcionalidad, ejecutar el entorno con Docker Compose.
Ejemplo de ejecución:
docker-compose up --build
Hit #4
🚀 Release: Refactorización del Cliente y Servidor TCP en un Único Programa
📌 Descripción
En esta versión, se ha refactorizado el código de los programas Cliente y Servidor TCP en un único programa que funciona simultáneamente como cliente y servidor. El programa ahora acepta parámetros para configurar las direcciones IP y los puertos de escucha, permitiendo que dos instancias del programa se comuniquen entre sí, saludándose mutuamente a través de cada canal de comunicación.
El programa toma los siguientes parámetros al iniciarse:
- Dirección IP y puerto para escuchar saludos (como servidor).
- Dirección IP y puerto de otro nodo para enviar saludos (como cliente).
Al tener dos instancias del programa en ejecución, cada una configurada con los parámetros del otro, ambas se saludarán mutuamente a través de sus respectivos canales de comunicación.
✅ Cambios en el Programa (ClienteServidorTCP)
- Unificación: El programa ahora actúa tanto como cliente como servidor al mismo tiempo.
- Conexión y reconexión automática: El cliente intenta reconectarse de manera automática si la conexión al servidor se pierde.
- Comunicación bidireccional: Cada instancia del programa se comunica con la otra, enviándose saludos mutuamente.
▶️ Instrucciones de Uso
Para testear, ejecutar el archivo bash ubicado en /src/scripts/test_hit4.sh.
Ejemplo de ejecución:
bash /ComunicacionTCP/src/scripts/test_hit4.shHit #2-3
🚀 Release: Reconexión del Cliente TCP en Caso de Desconexión del Servidor
📌 Descripción
Esta versión agrega la capacidad de reconexión en el cliente TCP. En caso de que el servidor cierre la conexión o termine abruptamente, el cliente intentará reconectarse automáticamente y enviar el saludo nuevamente.
Además, se modifica el servidor TCP para que siga funcionando incluso si el cliente (proceso A) cierra la conexión, por ejemplo, al matar el proceso. El servidor ahora continúa funcionando, esperando nuevas conexiones.
✅ Cambios en Cliente TCP (ClienteTCP)
- Se implementa una lógica de reconexión que intenta volver a conectarse al servidor cuando la conexión se pierde.
- El cliente reintenta el envío del saludo después de establecer la reconexión con éxito.
✅ Cambios en Servidor TCP (ServidorTCP)
- El servidor sigue funcionando y escucha nuevas conexiones después de que el cliente termine la conexión inesperadamente.
▶️ Instrucciones de Uso
Para testear, ejecutar los archivos Bash que se encuentran en /src/scripts.
Ejemplo de ejecución:
/bin/bash /ComunicacionTCP/src/scripts/test_hit3.shHit #1
Release Hit #1 - Implementación Cliente-Servidor TCP con Docker
Descripción
Esta versión implementa la comunicación básica entre un cliente y un servidor TCP en Java, junto con la configuración para su ejecución en contenedores Docker.
✅ Servidor TCP (ServidorTCP)
- Espera conexiones en el puerto
5000. - Recibe un mensaje del cliente y envía una respuesta.
✅ Cliente TCP (ClienteTCP)
- Se conecta al servidor especificado en la variable de entorno
DIRECCION_SERVIDOR. - Envía un saludo y espera la respuesta del servidor.
✅ Dockerización
- Se incluyen
Dockerfileseparados para cliente y servidor. - Se proporciona
docker-compose.ymlpara levantar ambos servicios.
Instrucciones de Uso
Para construir y ejecutar los contenedores:
docker-compose up --build