Ejercicios selectos (networking).

  1. Consulte el API para documentarse y ampliar la información respecto a los detalles y el uso de la clase URL.
  2. Los constructores de clase URL puede lanzar excepciones si la URL no está bien formada. Compare los Ejemplos ParseURL y ParseURL2 y asegúrese de comprender la equivalencia funcional así como sus diferencias.
  3. Con base en el Ejemplo LectorURL construya una nueva URL o modifique la del ejemplo para que pruebe con otras direcciones y páginas que utiliza con frecuencia. La idea es poder ver el conjunto de comandos y contenidos de un archivo html tal y como lo vería su navegador (browser) favorito.
  4. En el Ejemplo LectorURL se hace uso de método openStream. Considere ahora el Ejemplo LectorURL2 en donde primero se abre una conexión, y de ésta se obtiene el flujo de entrada correspondiente (líneas 18-19). Compare ambos ejemplos, revise el API para documentarse respecto a los métodos y clases involucrados, y asegúrese de comprobar que son equivalentes.
  5. Escriba un programa que realice lo siguiente con base en los ejercicios anteriores:
    • Lea una cadena que representa una dirección URL de un archivo HTML.
    • Acceda a dicha dirección y extraiga su contenido línea por línea.
    • Cada línea deberá ser guardada en un archivo de texto que tendrá por nombre "index.html".
    • Deberá considerar y gestionar todas las excepciones que pudieran generarse. Nos es válido que main reporte que podría lanzar una excepción.
  6. Tomando como base en los Ejemplos ServidorDeFecha y ClienteDeFecha, modifique los programas para que realicen lo siguiente:
    • Actualmente, si el cliente se ejecuta antes que el servidor se genera un error y termina. Realice los cambios necesarios para que el cliente intente conectarse nuevamente después de 3 segundos.
      • Lo anterior debe realizarse cuatro veces, si no se pudo conectar el programa termina.
    • El servidor deberá recibir como argumento en su invocación un número que representará el número de conexiones que atenderá; así si dicho número es 5 por ejemplo, el servidor podrá atender las peticiones de 5 clientes y terminará.
  7. Tomando como referencia los Ejemplos ServidorEco y ClienteEco, modifique los programas para que realicen lo siguiente:
    • El cliente deberá procesar de la entrada estándar la cadena que envía al servidor. Ejemplo: Cliente envía: Hola!.
    • El servidor deberá invertir la cadena que recibe del cliente, enviársela invertida, y el cliente deberá reportarla en la salida estándar. Ejemplo: Servidor envía: !aloH.
  8. Escriba una aplicación que realice lo siguiente:
    • Construya un servidor que permita la conexión con dos clientes: Cliente1 y Cliente2.
    • La idea es que Cliente1 se comunique (envíe texto) a Cliente2 (y viceversa) a través del servidor.
    • El comportamiento de los clientes deberá ser como el del Ejercicio 6.
    • Si el servidor recibe de cualquiera de los clientes la palabra clave "parangaricutirimicuaro", todo lo que reciba el servidor deberá invertirse (revise el ejercicio anterior) al cliente correspondiente, hasta que nuevamente alguno de los clientes envíe la palabra clave.
    • Si puede construir una GUI (interfaz gráfica) para este ejercicio sería sensacional; si no, basta con que funcione en la terminal.
    • Nota: múltiples solicitudes de clientes pueden entrar en el mismo puerto y, en consecuencia, en el mismo ServerSocket. Las solicitudes de conexión de los clientes se encolan en el puerto, por lo que el servidor debe aceptar las conexiones de forma secuencial. Sin embargo, el servidor puede atenderlos simultáneamente mediante el uso de hilos, es decir, un hilo por cada cliente.
    • Sugerencia 1: consulte la siguiente documentación de The Java Tutorials.
    • Sugerencia 2: genere dos sockets en el servidor, y utilice hilos tanto en el cliente como en el servidor para procesar el envío/recepción de los mensajes del chat.
  9. Construya una aplicación que permita transferir un archivo de una computadora a otra. La idea de la trasferencia de datos por sockets es la misma que la planteada en los ejemplos, con la diferencia de que no transferirá texto sino bytes. En este sentido, se recomienda revisar en el API algunas clases que lo auxilien en dicha transferencia DataOutputStream y DataInputStream pueden ser buenos puntos de partida. La idea es tener un servidor de archivos muy sencillo.
    1. El cliente transfiere el nombre de archivo que desea.
    2. El servidor busca el archivo correspondiente:
      1. Si existe lo envía al cliente.
      2. Si no existe lo notifica.
    3. Para que su programa sea más atractivo, se recomienda documentarse acerca de la clase JFileChooser (GUI). Además de interactivo y más agradable a la vista que la terminal, el uso de esta clase puede simplificar aspectos relacionados con el manejo de archivos (nombre, ruta, etcétera); sin embargo, no es indispensable.
    4. El uso de una barra de progreso (JProgressBar) haría a su programa extremadamente atractivo, interactivo y hasta conmovedor, pero tampoco es indispensable. Sugerencia: revise la clase SwingWorker.
  10. Además de DatagramSocket, que permite a los programas enviarse paquetes entre sí, java.net incluye una clase llamada MulticastSocket. Este tipo de socket se utiliza en el lado del cliente para escuchar los paquetes que el servidor transmite a varios clientes. Con base en esto, modifique el Ejemplo Servidor de Citas para que:
    • El cliente solicite una nueva cita, hasta un máximo de 5, cada 7 segundos.
    • En lugar de enviar una cita al cliente que la solicite, el servidor transmita una cita cada 30 segundos a todos los clientes que estén escuchando. Obviamente, el cliente deberá también ser ajustado. Se sugiere revisar, además del API, el apartado de broadcasting de The Java Tutorials.
  11. ¿Continuará?


No hay comentarios.:

Publicar un comentario