3. Programación en red

Actividades de refuerzo

JP01.java - JP10.java Realiza los ejercicios de programación multiproceso.

JH01.java - JH20.java Realiza los ejercicios de programación multihilo.

Actividades de iniciación

Crea las siguientes aplicaciones cliente-servidor (ayúdate de los siguientes apuntes):

JC01.java - JS01.java (puerto 10001) Crea un servidor que escuche y atienda a un solo cliente por el puerto 10001. Una vez el cliente se conecte al servidor correctamente, éste le enviará al cliente la cadena ¡Hola, mundo! y tanto el servidor como el cliente finalizarán.

JC02.java - JS02.java (puerto 10002) Crea un servidor que escuche y atienda a un solo cliente. Una vez el cliente se conecte al servidor correctamente, éste le enviará al cliente cincuenta enteros aleatorios del 0 al 10 (ambos incluidos) y tanto el servidor como el cliente finalizarán.

JC03.java - JS03.java (puerto 10003) Crea un servidor de eco que escuche y atienda a un solo cliente. El cliente solicitará al usuario un mensaje (cadena de caracteres) y se lo enviará al servidor, éste lo recibirá y le enviará al cliente el mismo mensaje.

JC04.java - JS04.java (puerto 10004) Repite la actividad anterior pero esta vez el servidor de eco escuchará y atenderá a varios clientes (el servidor lanzará un hilo por cliente).

JC05.java - JS05.java (puerto 10005) Repite la actividad anterior pero esta vez si el usuario introduce Adiós., el cliente finalizará.

JC06.java - JS06.java (puerto 10006) Repite la actividad anterior pero esta vez el servidor si no recibe conexiones en 10 segundos expirará (setSoTimeout()).

JC07.java - JS07.java (puerto 10007) Crea un servidor de eco pero, esta vez, usando el protocolo UDP.

JC08.java - JS08.java (puerto 10008) Crea un servidor que escuche y atienda a varios clientes. El cliente solicitará al usuario dos enteros y se lo enviará al servidor, éste lo recibirá y le enviará al cliente la suma de los dos enteros.

JC09.java - JS09.java (puerto 10009) Repite la actividad anterior, pero esta vez el servidor guardará en un fichero de texto las diferentes sumas.

JC10.java - JS10.java (puerto 10010) Crea una calculadora simple. El cliente solicitará al usuario dos números reales (double), una operación (carácter +, -, * o /) y se los enviará al servidor. El servidor realizará el cálculo y le enviará el resultado al cliente.

Actividades de desarrollo

Crea las siguientes aplicaciones cliente-servidor (un servidor podrá atender a varios clientes a la vez):

JC11.java - JS11.java (puerto 10011) Crea un juego simple de piedra, papel o tijera. El cliente solicitará al usuario una de las tres opciones (piedra, papel o tijera) y se lo enviará al servidor. El servidor generará aleatoriamente una opción (piedra, papel o tijera) y le indicará al cliente si ha ganado, empatado o perdido.

JC12.java - JS12.java (puerto 10012) Crea un juego simple de piedra, papel, tijera, lagarto o Spock. El cliente solicitará al usuario una de las cinco opciones (piedra, papel, tijera, lagarto o Spock) y se lo enviará al servidor. El servidor generará aleatoriamente una opción (piedra, papel, tijera, lagarto o Spock) y le indicará al cliente si ha ganado, empatado o perdido.

JC13.java - JS13.java (puerto 10013) Crea un juego simple de pares y nones. El cliente solicitará al usuario si elige pares (par) o nones (impar) y un entero de 0 a 10 (ambos incluidos) y se lo enviará al servidor. El servidor generará un entero aleatorio de 0 a 10 (ambos incluidos) y le indicará al cliente si ha ganado o perdido.

JC14.java - JS14.java (puerto 10014) Crea un juego simple de adivinar el número. El servidor generará para cada cliente un entero aleatorio entre 0 y 100 (ambos incluidos). El cliente solicitará al usuario un entero y lo enviará al servidor hasta que adivine el entero generado. El servidor indicará, para cada entero recibido por el cliente, si es mayor, menor o ha acertado. Si acierta, terminará la conexión del cliente y le indicará en cuantos intentos lo ha conseguido.

JC15.java - JS15.java (puerto 10015) Crea un servidor de eco (como la actividad JC04.java - JS04.java) controlando el acceso de los clientes al servidor mediante un sistema de usuario y clave. El servidor almacenará, mediante arrays de Strings, los usuarios grego, alba y pedro y las contraseñas grego1234, alba1234 y pedro1234 respectivamente. Una vez que el usuario ha iniciado sesión correctamente, todo lo que escriba se le replicará con el mismo mensaje; podrá salir con Adiós..

JC16.java - JS16.java (puerto 10016) Crea un servidor simple de archivos. El cliente solicitará al usuario dos rutas: la ruta del archivo a descargar y la ruta donde quiere que se guarde el archivo. El cliente enviará al servidor la ruta del archivo a descargar y éste le enviará el archivo.

JC17.java - JS17.java (puerto 10017) Crea un chat simple. El cliente solicitará al usuario un alias. A continuación, el usuario podrá enviar mensajes y recibirá los mensajes de otros usuarios. Cuando el servidor reciba un mensaje, lo reenvíará a todos los clientes activos junto con el alias correspondiente.

JC18.java - JS18.java (puerto 10018) Crea una base de datos sencilla con un fichero de texto datos.txt. Dicho fichero contendrá, en cada línea, una tupla de índice-palabra; ejemplos: 12 gato, 34 león, 2 hormiga, etc. El cliente solicitará al usuario un comando, leer o escribir, y un entero y se lo enviará al servidor. El servidor, si la operación es de lectura, buscará y le enviará la palabra según el índide dado. Si es de escritura, creará, o machacará, una nueva tupla índice-palabra.

JC19.java - JS19.java (puerto 10019) Calcula la distancia euclídea de dos puntos 2D. El cliente solicitará al usuario dos puntos 2D (x1, y1, x2 e y2) y le enviará al servidor dos objetos de una clase Punto2D. A continuación, el servidor recibirá esos dos objetos, calculará la distancia euclídea y le enviará el resultado cliente.

JC20.java - JS20.java (puerto 10020) Calcula el punto medio de dos puntos 3D. El cliente solicitará al usuario dos puntos 3D (x1, y1, z1, x2, y2 y z2) y le enviará al servidor dos objetos de una clase Punto3D. A continuación, el servidor recibirá esos dos objetos, calculará el punto medio y le enviará el resultado al cliente. Opcionalmente, haz que el servidor envíe el punto medio como un objeto de la clase Punto3D.

Actividades de ampliación

Crea las siguientes aplicaciones cliente-servidor (un servidor podrá atender a varios clientes a la vez):

JC21.java - JS21.java Repite el juego de adivinar el número (JC14.java - JS14.java) pero, esta vez, el servidor almacenará una clasificación con los mejores resultados. Esta clasificación se lo mostrará al cliente si así lo solicita.

JC22.java - JS22.java Repite la actividad anterior pero con un sistema de usuarios y claves, es decir, la clasificación vendrá indicada en ella el alias y el número de intentos.

JC23.java - JS23.java Repite el chat (JC17.java - JS17.java) pero almacenando en un fichero el historial de mensajes.

JC24.java - JS24.java Repite la actividad anterior pero con un sistema de usuarios y claves.

JC25.java - JS25.java Crea el juego pares y nones entre jugadores con un sistema de usuarios y claves. Para ello, el servidor actuará de intermediario entre los jugadores (clientes).

Entrega

Todo el código estará en una misma carpeta. Se podrá compilar todo de una vez con javac *.java.

Si algún código no compila correctamente, crear una nueva carpeta denominada otros y mover dicho código allí.

Volver a cursos.

Curso creado por Manuel Ignacio López Quintero bajo esta licencia.