Ejercicios de conexiones de red

17.1. Vamos a ver como ejemplo una aplicación de chat para el móvil. En el directorio ejemplos de las plantillas de la sesión se encuentra una aplicación web con todos los servlets que necesitaremos para probar los ejemplos. Podremos desplegar esta aplicación en Tomcat para hacer pruebas con nuestro propio servidor.

Podemos encontrar la aplicación de chat implementada en el directorio Chat, que realiza las siguientes tareas:

?accion=login&id=<nick_del_usuario>

Si el login es correcto, el servidor nos devolverá un código de respuesta 200 OK. Además deberemos leer la cabecera URL-Reescrita, donde nos habrá enviado la URL rescrita que deberemos utilizar de ahora en adelante para mantener la sesión.

?accion=lista

Esto nos devolverá como respuesta una serie de mensajes, codificados mediante un objeto DataOutputStream de la siguiente forma:

<nick1> <mensaje1>
<nick2> <mensaje2>

...
<nickN> <mensajeN>

De esta forma podremos utilizar un objeto DataInputStream para ir leyendo con el método readUTF las cadenas del nick y del texto de cada mensaje del chat:

String nick = dis.readUTF();
String texto = dis.readUTF();

?accion=enviar

El mensaje se deberá codificar en binario, escribiendo la cadena del mensaje con el método writeUTF de un objeto DataOutputStream. Si obtenemos una respuesta 200 OK el mensaje habrá sido enviado correctamente.

17.2. Vamos a acceder desde el móvil a nuestra tienda virtual. Mostraremos en el móvil una pantalla en la que aparecerá la lista de productos que hay disponibles en nuestra tienda. Al pulsar sobre cada uno de ellos nos mostrará información detallada sobre el producto.

Tenemos la aplicación base implementada en el directorio Tienda. Deberemos añadir en el método leeProductos de la clase ListaProductos el código necesario para leer la lista de productos de la red.

Para ello conectaremos a la URL donde tenemos el servlet de nuestra tienda y leeremos la información de los productos que nos envía en la respuesta. La información que se envía consiste en una serie de objetos Producto serializados. Para leerlos podremos deserializar objetos Producto del flujo de entrada hasta que se produzca una EOFException, indicándonos que se ha llegado al final del flujo.