diff --git a/README.md b/README.md new file mode 100644 index 0000000..927a06d --- /dev/null +++ b/README.md @@ -0,0 +1,57 @@ +# Servidor de Chat en Python (PSP) + +**VIDEO FUNCIONALIDAD** +https://youtu.be/OMbzm-YJ1Zg + +**VIDEO EXPLICATIVO CÓDIGO** +https://youtu.be/EmwJFCWFms0 + +Este proyecto implementa un servidor de chat multihilo utilizando sockets TCP en Python. Es parte del módulo de Programación de Servicios y Procesos (PSP). + +## Características + +- **Multihilo:** Maneja múltiples clientes simultáneamente utilizando `threading`. +- **Broadcast:** Reenvía los mensajes recibidos de un cliente a todos los demás conectados. +- **Protocolo Simple:** + - Solicita el nombre al cliente al conectarse (`NAME?`). + - Soporta comandos básicos de administración. +- **Logs:** Muestra actividad del servidor (conexiones, mensajes) en la consola o interfaz configurada. + +## Requisitos + +- Python 3.x + +## Instalación + +No se requiere instalación de librerías externas, ya que utiliza la librería estándar de Python (`socket`, `threading`). + +1. Clona el repositorio o descarga el archivo `chat_server.py`. + +## Uso + +Para iniciar el servidor, ejecuta el script desde la terminal: + +```bash +python3 chat_server.py +``` + +Por defecto, el servidor escuchará en: +- **Host:** `0.0.0.0` (todas las interfaces) +- **Puerto:** `5050` + +Puedes modificar las variables `DEFAULT_HOST` y `DEFAULT_PORT` en el código si necesitas cambiar la configuración predeterminada. + +## Protocolo de Conexión + +1. El cliente se conecta al socket del servidor. +2. El servidor envía la cadena `NAME?\n`. +3. El cliente debe responder con su nombre de usuario seguido de un salto de línea (p.ej., `MiUsuario\n`). +4. Una vez identificado, cualquier mensaje enviado por el cliente será retransmitido a todos los demás usuarios con el formato `[Nombre]: Mensaje`. + +## Estructura del Proyecto + +- `chat_server.py`: Contiene la lógica principal del servidor (clase `ChatServer` y `ClientConn`). + +## Notas + +Este servidor está diseñado con fines educativos para demostrar el uso de Sockets y Hilos en Python.