Práctica Nº 6: Comunicación mediante protocolo UDP Asignatura PROGRAMACIÓN Laboratorio de Programación Grado en Enginyeria Electrònica de Telecomunicacions Curso 2019-20 Objetivos • • • Identificar las clases que sirven para trabajar con el protocolo UDP. Describir cómo se usan estas clases en el servidor y en el cliente. Desarrollar aplicaciones que usen el protocolo UDP. Material a entregar Un archivo zip con la carpeta de los 2 proyectos en eclipse y el archivo respuestas.docx. La carpeta de cada proyecto debe contener entre otros los archivos UDPCliente.java y UDPServidor.java dentro de la subcarpeta “src” y la documentación dentro de la subcarpeta “doc”. "Guía de estilo El documento Java_GuiaEstilo.pdf describe las herramientas para compilar, ejecutar y generar la documentación. Además, se indican las convenciones que usaremos a la hora de escribir el código Java. Es un requisito seguir las indicaciones sobre los nombres de las clases, los nombres de los métodos y los comentarios de documentación. Descripción de la aplicación a realizar El Ministerio de Sanidad del Gobierno de España ha iniciado un estudio para conocer la incidencia de la epidemia de Covid-19 entre la población española. El Ministerio nos han encargado el desarrollo de una aplicación Java que permita gestionar adecuadamente la recolección de los resultados de los tests realizados y el análisis de estos. Con carácter previo al desarrollo del proyecto es necesario crear un prototipo básico que permita comunicar entre los elementos del sistema, para lo cual se ha escogido el protocolo UDP. En concreto, se desea enviar mediante el protocolo UDP un mensaje de un cliente a un servidor, y que el servidor muestre por consola el mensaje recibido. 1 Práctica Nº 6: Comunicación mediante protocolo UDP Asignatura PROGRAMACIÓN Tareas: Tarea 1 Implementar una clase UDPCliente que permita enviar un mensaje de un tipo String de un cliente a un servidor vía protocolo UDP. La clase UDPCliente contará con los siguientes atributos: private private private private DatagramSocket udpSocket; InetAddress serverAddress; int port; Scanner scanner; Implementa el constructor con y sin parámetros, así como los métodos get y set correspondientes. Implementa un método enviar que permita al usuario introducir mensajes por pantalla, los obtenga a través de la instancia de Scanner y los envíe a través del DatagramSocket. Tarea 2 Implementar una clase UDPServidor que permita recibir mensajes de tipo String vía protocolo UDP enviados desde las instancias de UDPCliente. La clase UDPServidor contará con los siguientes atributos: private DatagramSocket udpSocket; private int port; Implementa el constructor con y sin parámetros, así como los métodos get y set correspondientes. Implementa un método escuchar que reciba los mensajes enviados por las instancias de UDPCliente y las muestre por pantalla. La salida por pantalla en la consola del servidor debe ser similar a la siguiente: -- Ejecutando UDP Server en DESKTOP-76FPS2L/192.168.10.1-Mensaje de 127.0.0.1: Hola, esto es mi primer mensaje por UDP Donde: • La dirección del servidor (en el ejemplo: “DESKTOP-76FPS2L/192.168.10.1”) podemos obtenerla mediante el método InetAddress.getLocalHost(). • La dirección del cliente (en el ejemplo: “127.0.0.1”) podemos obtenerla del propio paquete recibido. Tarea 3 Incorpora un método main en cada una de las clases UDPCliente y UDPServidor de manera que sea posible ejecutarlas independientemente y comprueba su funcionamiento. 2 Práctica Nº 6: Comunicación mediante protocolo UDP Asignatura PROGRAMACIÓN Nota En Eclipse es posible pasar argumentos al método main desde la opción “Run Configurations” del menú “Run”: En la pestaña Arguments de la aplicación Java seleccionada es posible introducir diferentes parámetros, separados por espacios, de manera que podemos tener diferentes configuraciones de ejecución de nuestras aplicaciones. Estos argumentos se pasarán al método main como elementos de String[] args de tal modo que podemos acceder a ellos en nuestra aplicación. 3 Práctica Nº 6: Comunicación mediante protocolo UDP Asignatura PROGRAMACIÓN En este ejemplo, se pasan como parámetros la dirección 127.0.0.1 (args[0]) y el puerto 7077 (args[1]): InetAddress serverAddress = InetAddress.getByName(args[0]); int port = Integer.parseInt(args[1]); Pregunta 1 Si quisiéramos enviar desde el servidor un mensaje al cliente para confirmar la correcta recepción de su mensaje inicial y mostrar la confirmación en el cliente, ¿qué modificaciones deberías realizar en el código de cada una de las clases? ¿Sería posible enviar y recibir simultáneamente en el cliente? Razona tu respuesta. Nota: No es necesario que implementes esta funcionalidad en tu proyecto. 4