Skip to content

Nonit0/TCP-Multihilo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

1.- Descripción del proyecto

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.

2.- Estructura del proyecto

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

3.- Clases y funcionalidad

3.1.- Usuario.java

  • 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: ...'

3.2.- GestorUsuarios.java

  • 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.

3.3.- ServidorTCP.java

  • 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.

3.4.- ClienteHandler.java

  • 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.

4.- ClienteTCP.java

Permite enviar comandos al servidor a través de TCP. Ejemplo de comandos que puede enviar:

reg Guille guille@gmail.com

guille

log guille@gmail.com guille
datu guille@gmail.com

list

hash5 Guille
salir

5.- Compilación y ejecución

5.1.- Compilar servidor y cliente

javac servidor/.java cliente/.java

5.2.- Ejecutar servidor

java servidor.ServidorTCP

5.3.- Ejecutar cliente (en otra terminal)

java cliente.ClienteTCP

6.- Ejemplo de flujo de comandos

Cliente 1 registra un usuario:

reg Guille guille@gmail.com
 guille

Cliente 1 inicia sesión:

log guille@gmail.com
 guille

Cliente 1 consulta sus datos:

datu guille@gmail.com

Cliente 1 consulta la lista de usuarios:

list

Cliente 1 obtiene el hash MD5 del fichero:

hash5 Guille

Cliente 1 cierra la conexión:

salir

7.- Notas importantes

El 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages