Está en la página 1de 7

LAB-273 Laboratorio de Telemática - MÓDULO 3

Módulo 3 Capa de Aplicación


Presentación del Módulo
Las aplicaciones de red son la razón de ser de una red de computadoras. El desarrollo de una aplicación
de red implica escribir programas que se ejecuten en distintos sistemas terminales y que se comuniquen
entre sí a través de la red. Por ejemplo, en una aplicación Web se emplean dos programas diferentes
que se comunican entre sí: el navegador que se ejecuta en el host del usuario y el programa del servidor
web que se ejecuta en un host, precisamente un servidor web, tanto el programa cliente y el programa
servidor interactúan entre sí enviándose mensajes a través de la red.

El presente módulo centra su atención en el desarrollo de aplicaciones distribuidas usando el


paradigma Cliente/Servidor y se compone por tres laboratorios, siendo requerido el uso de Java y
Javascript..

Objetivo y Competencias
Considerando lo indicado, el Módulo 3 abarca tanto la construcción de software de aplicación como el
diseño y configuración de topologías de red, es en este sentido que a continuación se proponen los
siguientes objetivos de aprendizaje para el presente modulo:
 Conocer y aplicar el API de sockets para desarrollar aplicaciones de red
 Que el alumno sea capaz de crear aplicaciones distribuidas usando el modelo Cliente-Servidor
 Comprender y aplicar las diferentes clases y métodos ofrecidos por Java y Javascript para el
desarrollo de software de red.

Las competencias que pretende desarrollar en los alumnos el presente modulo, son las siguientes:
 Entiende y aplica el concepto de socket en el desarrollo aplicaciones distribuidas usando el
modelo Cliente-Servidor.
 Desarrolla programas Cliente y Servidor haciendo un efectivo uso de las APIs provistas por Java
y Javascript.
 Distingue las diferencias de los protocolos de transporte UDP y TCP en la comunicación entre
clientes y servidores.
 Reconoce e identifica el concurso de los protocolos HHTP, SMTP, DHCP y DNS para el
despliegue de servicios de red en un entorno empresarial.

Actividades individuales
Para el logro de las competencias, la participación del alumno incluirá:

1. Lectura de artículos, capítulos de libros, videos o infografías de referencia.


2. Subir a la plataforma virtual, las tareas correspondientes en las fechas indicadas en la
plataforma del curso.
3. Aplicar tests de Autoevaluación para los laboratorios.
4. Realizar los ejercicios de aplicación resueltos para cada tema
5. Defensa de los laboratorios presenciales. Desarrollo y respuestas a las preguntas del docente.
6. Subir a la plataforma virtual la actividad complementaria o miniproyectos en las fechas indicadas
en la plataforma del curso.
LAB-273 Laboratorio de Telemática - MÓDULO 3

Temas del Módulo


Los temas de este módulo son:
 Aplicaciones Cliente/Servidor
 Interactuando con Correo Electrónico
 Servidores Web con Node JS
LAB-273 Laboratorio de Telemática - MÓDULO 3

Tema 3.1 Aplicaciones Cliente/Servidor


La arquitectura cliente-servidor es un modelo de aplicación distribuida en el que las tareas se reparten
entre los proveedores de servicios (servidores), y los que solicitan el servicio (clientes). El mecanismo
básico para la comunicación entre procesos es el socket. Un socket es la interfaz de programación
(API) con la que se construyen las aplicaciones de red y debe operar con un protocolo concreto de la
capa de transporte, TCP o UDP.

3.1.1 Lecturas 7
Las lecturas recomendadas para el presente tema se hallan disponibles en la plataforma virtual del
curso. Estos recursos son:
• Video de la Universidad de Washington – Sockets
• Documentación de la Universidad de Valladolid sobre Sockets y Java
• Documentación de Oracle sobre el API de Java para comunicaciones sincrónicas (TCP) y
asíncronas (UDP) y protocolos HTTP y SMTP.
3.1.2 Tarea 7
El enunciado se halla disponible en la Plataforma del curso.
Tomar en cuenta que la tarea es personal, dos o más tareas similares serán anuladas.
El alumno deberá remitir el informe de la tarea a través de la plataforma adjuntando un archivo único
que incluya el trabajo solicitado.

3.1.3 Enunciado Laboratorio 7


Cajero Automático usando java sockets TCP
Desarrollar una aplicación en red que simule la operación de un cajero automático. Los requerimientos
son:
1) Implementar en el servidor las siguientes operaciones básicas
a. Deposito. - Permite que un usuario pueda depositar un monto de dinero en su cuenta bancaria.
b. Retiro. - Realiza una operación de retiro de efectivo.
c. Consulta. - Esta operación deberá desplegar el saldo de la cuenta.
d. Salida o abandono de la aplicación.
2) La aplicación deberá permitir el ingreso únicamente a usuarios válidos, por lo que se verificará el
acceso mediante un login y password.
3) El programa cliente deberá conectarse al servidor y una vez que el usuario sea aceptado en el
sistema, se deberá presentar un prompt para solicitar la introducción de un comando. Los comandos
serán:
Comando Argumento Significado
d Monto Deposito. Incrementa el saldo de la cuenta con el monto de dinero a
depositar. Se deberá desplegar el nuevo saldo.
r Monto Retiro. Reduce el saldo de la cuenta. Se debe verificar si existe saldo
suficiente para realizar el retiro. Se deberá desplegar el nuevo saldo.
c [Ninguno] Consulta. Se deberá desplegar toda la información de la cuenta
(Cuenta, Usuario y Saldo)
q [Ninguno] Abandona el programa.

El programa deberá iterar para leer y procesar cada comando ingresado a través del
prompt de la aplicación: cajero> _
LAB-273 Laboratorio de Telemática - MÓDULO 3

El comando introducido por el usuario deberá ser verificado de forma que no existan
errores para luego enviar al servidor la invocación de la operación requerida.
 Ejemplo de una sesión:
cajero> d 51.75
cajero> r 10
cajero> c
cajero> q

4) La “Base de Datos” de clientes deberá residir en el servidor con las siguiente cuentas y saldos
disponibles:
login Password Cuenta Usuario Saldo
Jose jp15 12345 Jose Perez 1200.50
maria mc60 67890 Maria Cano 300.00
andy al17 12377 Andy Lopez 500.80
lupe lo73 77123 Lupe Ortiz 50.00

Las operaciones del servicio deberán ser implementadas de forma remota, vale decir que deben
implementarse en el servidor y tener un impacto en la “Base de datos”.
LAB-273 Laboratorio de Telemática - MÓDULO 3

Tema 3.2 Interactuando con Correo Electrónico

3.2.1 Lecturas 8
Las lecturas recomendadas para el presente tema se hallan disponibles en la plataforma virtual del
curso. Estas lecturas son:
• Video de la Universidad de Washington – Sockets
• Documentación de la Universidad de Valladolid sobre Sockets y Java
• Documentación de Oracle sobre el API de Java para comunicaciones sincrónicas (TCP) y
asíncronas (UDP) y protocolos HTTP y SMTP.
3.2.2 Tarea 8
El enunciado se halla disponible en la Plataforma del curso. Tomar en cuenta que la tarea es personal,
dos o más tareas similares serán anuladas
El alumno deberá remitir el informe de la tarea a través de la plataforma adjuntando un archivo único
que incluya el trabajo solicitado.

3.2.3 Enunciado Laboratorio 8


El presente laboratorio tiene el propósito de desarrollar programas cliente para interactuar con un
servicio de correo electrónico. A este propósito, se usará la infraestructura de correo electrónico
implementada para la asignatura, recordemos que en el Laboratorio 5, se usó un servidor de correo
Postfix y un agente de correo Evolution.
Esta vez, deberá desarrollar dos programas cliente usando java. El primer programa enviara un correo
electrónico desde su cuenta de usuario (usuario@correo.telematica.edu.bo) usando el protocolo SMTP.
El segundo programa interactuara usara el protocolo IMAP para gestionar el contenido de su buzón de
correo. Es deseable que su programa implemente opciones para listar, recuperar y desplegar mensajes
de su buzón de correo.
LAB-273 Laboratorio de Telemática - MÓDULO 3

Tema 3.3 Programación JavaScript con Node JS


Node.js, es un proyecto creado por Ryan Dahl orientado a la creación de aplicaciones para Internet.
Desde su presentación, el proyecto no ha parado de crecer y actualmente es el segundo repositorio
más popular en Github (https://github.com). La mejor manera de aproximarse a Node es a través de la
definición que aparece en su página web: “Node.js es una plataforma construida sobre el entorno de
ejecución javascript de Chrome para construir fácilmente aplicaciones de red rápidas y escalables.
Node.js usa un modelo de E/S no bloqueante dirigido por eventos que lo hace ligero y eficiente, perfecto
para aplicaciones data-intensive en tiempo real”

El lenguaje de programación que se usa en Node.js es Javascript permitiendo que este popular lenguaje
de programación se aplique en muchos más contextos, en particular para producir servidores altamente
escalables. JavaScript es un lenguaje impulsado por eventos, en la que el flujo del programa no es
secuencial, sino que depende de los eventos, asíncronos en su mayoría por naturaleza, que se
producen durante la ejecución del mismo. Los principios de la programación asincrónica basada en
eventos son perfectos para la Web de hoy en día, donde las aplicaciones eficientes y de alta
concurrencia son esenciales para la buena experiencia del usuario y los resultados de una empresa.
3.3.1 Lecturas 9
Las lecturas recomendadas para el presente tema se hallan disponibles en la plataforma virtual del
curso. Estas lecturas son:
 Node.js Tutorial
 The Node Beginner Book - A comprehensive Node.js tutorial, Manuel Kiessling
 JavaScript Pocket Reference, David Flanagan
 Node.js API DOCs

3.3.2 Tarea 9
El enunciado se halla disponible en la Plataforma del curso.
Tomar en cuenta que la tarea es personal, dos o más tareas similares serán anuladas
El alumno deberá remitir el informe de la tarea a través de la plataforma adjuntando un archivo único
que incluya el trabajo solicitado.

3.3.3 Enunciado Laboratorio 9


Servidor HTTP que retorne datos en formato JSON
Escribir un servidor HTTP que reciba peticiones GET. Los parámetros de GET deberán incluir una ruta
establecida como: ‘/api/parsetime'. Asuma que la petición tiene un parámetro 'iso' cuyo valor es una
fecha hora en formato ISO.
Ejemplo: /api/parsetime?iso=2018-07-10T12:10:15.474Z

La respuesta JSON deberá contener únicamente las propiedades 'hora', 'minuto' y 'segundo'
correspondientes a la fecha recibida.
Ejemplo: { "hora": 8, "minuto": 10, "segundo": 15 }

El servidor deberá escuchar en un puerto cuyo número será el primer argumento del programa.
LAB-273 Laboratorio de Telemática - MÓDULO 3

PISTAS
Usar el módulo ‘http’ de Node.JS. El objeto `request` de HTTP tiene un atributo `url` que se puede usar
para distinguir las rutas recibidas en las peticiones al servidor. El módulo `url` de Node se usa para
‘parsear’ una URL y sus parámetros.
Consulte la documentación de los módulos indicados que se halla disponible en la plataforma.

El servidor debe ejecutarse de la siguiente de la forma: node servidor.js 8000


Prueba su programa con un cliente HTTP (browser)

Ejemplo de URL:
http://localhost:8000/api/parsetime?iso=2018-07-10T12:10:15.474Z