Clase Servidor
Contador de los aciertos del servidor
Contador de los desaciertos consecutivos del servidor
ServerSocket se utiliza para usar el puerto 9090 y para aceptar conexiones entrantes
clientSocket se utiliza para aceptar la conexión del cliente
BufferedReader y PrintWriter se utilizan para leer y escribir mensajes desde y hacia el
cliente
Lee las líneas de entrada del cliente
Si el cliente envía "terminar", envía un mensaje de resumen y rompe el bucle
Convierte el número recibido en entero y lo compara con un número aleatorio
Actualiza los contadores de aciertos y desaciertos
Envía mensajes al cliente y finaliza la conexión si hay 3 desaciertos consecutivos
Captura errores de entrada y salida durante la comunicación
Asegura el cierre de los recursos (BufferedReader, PrintWriter, y Socket) en el bloque finally
Clase Cliente
Socket: Se conecta al servidor en localhost ([Link]) y el puerto 9090
PrintWriter y BufferedReader: Se utilizan para enviar y recibir datos entre el cliente y el
servidor
Random: Se utiliza para generar números aleatorios
Envía cada número al servidor utilizando el flujo de salida [Link](numero)
[Link](): Lee la respuesta del servidor
Si la respuesta es null, significa que el servidor cerró la conexión
Si la respuesta contiene la palabra "Perdiste", el cliente finaliza el envío de números y
termina el juego
Introduce una pausa de 1 segundo entre el envío de cada número
Envía terminar al servidor para indicar el fin del juego
Recibe el resumen final con el número de aciertos y desaciertos
Si ocurre una excepción durante la comunicación o el hilo es interrumpido, muestra un
mensaje de error
Captura cualquier error que ocurra al conectarse al servidor o al ejecutar el hilo
Resultado final