PrΓ‘ctica Formativa Obligatoria 1 (PFO 1) β Redes y Sistemas Distribuidos
Instituto de FormaciΓ³n TΓ©cnica Superior NΒ° 29 (IFTS 29)
Autor: BARANDA CABRERA, Gustavo Daniel
Sistema de chat TCP cliente-servidor multihilo desarrollado en Python. El servidor acepta mΓΊltiples conexiones simultΓ‘neas mediante hilos (threading), almacena cada mensaje recibido en una base de datos SQLite (chat.db) junto con la IP del cliente y el timestamp, y responde al cliente confirmando la recepciΓ³n.
El cliente permite enviar mensajes al servidor de forma interactiva desde la consola, con reintentos automΓ‘ticos de conexiΓ³n.
ββββββββββββββββββββββββββββββββββββββββββ
β Cliente (clientes.py) β
β - Conecta vΓa TCP a localhost:5000 β
β - EnvΓa mensajes por consola β
β - Escribe 'exito' para desconectar β
ββββββββββββββββ¬ββββββββββββββββββββββββββ
β TCP Socket
ββββββββββββββββΌββββββββββββββββββββββββββ
β Servidor (server.py) β
β - Escucha en localhost:5000 β
β - Thread por cada cliente conectado β
β β
β βββββββββββββββ βββββββββββββββββββ β
β β network.py β β db.py β β
β β (Sockets + β β (SQLite3 + β β
β β Threading) β β Persistencia) β β
β βββββββββββββββ ββββββββββ¬βββββββββ β
βββββββββββββββββββββββββββββΌβββββββββββββ
β
ββββββββββββββΌββββββββββββ
β chat.db β
β Tabla: mensajes β
β (id, contenido, β
β fecha_envio, β
β ip_cliente) β
ββββββββββββββββββββββββββ
Redes---Socket/
β
βββ server.py # Punto de entrada del servidor (args + init)
βββ clientes.py # Script del cliente TCP interactivo
βββ chat.db # Base de datos SQLite (generada automΓ‘ticamente)
βββ readme.md # Instrucciones bΓ‘sicas de ejecuciΓ³n
β
βββ servidor/ # MΓ³dulo del servidor
βββ __init__.py # InicializaciΓ³n del paquete
βββ db.py # ConexiΓ³n, creaciΓ³n de tabla y guardado de mensajes
βββ network.py # Socket TCP, aceptaciΓ³n de conexiones y manejo de clientes
| MΓ³dulo | DescripciΓ³n |
|---|---|
socket |
ComunicaciΓ³n TCP cliente-servidor |
threading |
Hilos daemon por cliente (multihilo) |
sqlite3 |
Persistencia de mensajes en chat.db |
argparse |
Argumentos de lΓnea de comandos (--host, --puerto) |
datetime |
Timestamp de recepciΓ³n de mensajes |
| Archivo | FunciΓ³n |
|---|---|
server.py |
Entry point: inicializa DB, socket y acepta conexiones |
servidor/db.py |
inicializar_db() β crea tabla mensajes; guardar_mensaje() β inserta en SQLite |
servidor/network.py |
inicializar_socket() β bind/listen; aceptar_conexiones() β loop + threads; manejar_cliente() β recv/send |
clientes.py |
conectar_al_servidor() β 3 reintentos; enviar_mensajes() β loop hasta 'exito' |
CREATE TABLE IF NOT EXISTS mensajes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
contenido TEXT NOT NULL,
fecha_envio TEXT NOT NULL,
ip_cliente TEXT NOT NULL
);- Python 3.7 o superior
- Sin dependencias externas (solo librerΓa estΓ‘ndar de Python)
git clone https://github.com/GustavoBaranda/Redes---Socket.git
cd Redes---Socket# Puerto por defecto: 5000
python server.py
# Puerto personalizado
python server.py --host localhost --puerto 5001# En otra terminal
python clientes.py
# Con parΓ‘metros personalizados
python clientes.py --host localhost --puerto 5001EscribΓ mensajes en la consola del cliente y presionΓ‘ Enter para enviarlos.
EscribΓexitopara cerrar la conexiΓ³n.
| InstituciΓ³n | IFTS NΒ° 29 (Instituto de FormaciΓ³n TΓ©cnica Superior NΒ° 29) |
| Carrera | Tecnicatura Superior en Desarrollo de Software |
| Materia | Redes y Sistemas Distribuidos |
| Trabajo | PFO 1 β PrΓ‘ctica Formativa Obligatoria 1 |
| Autor | Gustavo Baranda |
Gustavo Baranda