Este proyecto implementa un sistema cliente/servidor TCP multihilo en Java para gestionar usuarios, consultar datos y generar hashes MD5 de los ficheros de usuario.
- El servidor permite que múltiples clientes se conecten simultáneamente y ejecuten comandos.
- Cada cliente puede registrarse, iniciar sesión y ejecutar acciones según su estado (logueado o no).
- Se ha diseñado solo para Linux, utilizando md5sum para generar hashes MD5.
practica1/
├── servidor/
│ ├── ClienteHandler.java # Hilo que atiende a cada cliente
│ ├── GestorUsuarios.java # Gestión de usuarios (registro, login, listado)
│ ├── ServidorTCP.java # Clase principal del servidor
│ └── Usuario.java # Clase que representa a un usuario
├── cliente/
│ └── ClienteTCP.java # Cliente que envía comandos al servidor
├── files/ # Carpeta donde se crean los ficheros .dat de usuarios
└── README.md # Este documento- Representa un usuario del sistema.
- Atributos: nombre, email, passwd.
- Métodos:
- toString() → devuelve los datos del usuario en formato:
- 'Datos del usuario Nombre: ..., Email: ..., Passwd: ...'
- Clase encargada de gestionar la lista de usuarios.
- Funciones principales:
- registrar(Usuario u) → añade un usuario si el email no existe.
- login(String email, String passwd) → devuelve el usuario si las credenciales son correctas.
- buscarPorEmail(String email) → devuelve el usuario correspondiente.
- buscarPorNombre(String nombre) → devuelve el usuario correspondiente.
- listar() → devuelve todos los usuarios registrados.
- Seguridad en hilos: los métodos usan synchronized para evitar conflictos cuando varios clientes acceden simultáneamente.
- Clase principal del servidor.
- Funciones:
- Crea un ServerSocket en un puerto definido (ej. 5000).
- Acepta conexiones de clientes y crea un hilo ClienteHandler para cada uno.
- Permite ejecución concurrente, manejando varios clientes al mismo tiempo.
- Hilo que atiende a un cliente específico.
- Funciones principales:
- Recibe comandos del cliente y procesa según tipo.
- Verifica si el cliente está logueado para ciertos comandos.
- Comandos soportados:
- reg nombre email passwd → registra usuario y crea fichero .dat en files/.
- log email passwd → loguea al usuario.
- datu email → devuelve los datos de un usuario (solo si está logueado).
- list → devuelve todos los usuarios registrados (solo si está logueado).
- hash5 nombre → devuelve el MD5 del fichero del usuario (Linux: usa md5sum).
- salir → cierra la conexión con el cliente.
Permite enviar comandos al servidor a través de TCP. Ejemplo de comandos que puede enviar:
reg Guille guille@gmail.comguille
log guille@gmail.com guilledatu guille@gmail.comlist
hash5 Guillesalir5.1.- Compilar servidor y cliente
javac servidor/.java cliente/.javajava servidor.ServidorTCPjava cliente.ClienteTCPreg Guille guille@gmail.com
guillelog guille@gmail.com
guilledatu guille@gmail.com
listhash5 GuillesalirEl comando hash5 está diseñado solo para Linux (md5sum).
Todos los ficheros de usuario .dat se guardan en la carpeta files/.
Se ha cuidado la concurrencia: varios clientes pueden interactuar con el servidor al mismo tiempo sin problemas.
Mensajes de error claros:
Usuario ya existente
No logueado
Usuario no encontrado
Fichero no encontrado