laboratorio de programación práctica 3 entrada/salida y manejo de excepciones dpto. de ingeniería...

26
Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos http://www.lab.dit.upm.es/~lprg/ Abril 2004

Upload: trini-florin

Post on 04-Feb-2015

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Laboratorio de Programación

Práctica 3Entrada/Salida y

Manejo de excepciones

Dpto. de Ingeniería de Sistemas Telemáticos

http://www.lab.dit.upm.es/~lprg/

Abril 2004

Page 2: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 2

Objetivos

Se cubren los siguientes aspectos Lectura de un fichero de entrada Manejo de excepciones

Escenario Configuración de un router

Page 3: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 3

Internet: red de “redes”

Estaciones de usuario (PC)

Servidores

Router

A

B

Camino que va siguiendoel tráfico de la comunicacióndel PC A al servidor B (ruta)

Conexión entre dispositivos,a través de una red

R1R2

R3

R4

R5

Page 4: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 4

Un router es un dispositivo con conexiones a otros dispositivos a través de redes y que actúa como encaminador de tráfico.

Cada conexión se realiza a través de una interfaz, que es el punto de comunicación entre un dispositivo y el exterior.

Para encaminar el tráfico es necesario conocer las rutas hacia los posibles destinos no la ruta completa, sólo el “gateway” o “siguiente salto”. (R1

sólo necesita saber que para encaminar el tráfico dirigido hacia B, hay que enviarlo a R2)

Router

Page 5: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 5

En Internet, se necesita “algo” para identificar unívocamente las interfaces y redes. Para ello se utilizan las direcciones IP (Internet Protocol) Formada por 4 bytes

Cada byte permite 28 valores, entre 0 y 255 Notación

Notación decimal: 138.4.54 4 Notación binaria: 1111 1111 0000 0100 0111 0110 0000 0100

Dirección IP

138 4 54 4

1000 1010 0000 0100 0011 0110 0000 0100

Page 6: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 6

Una dirección de red identifica el conjunto de direcciones IP posibles de las interfaces conectadas en una red

El procedimiento empleado es hacer que todas las direcciones IP de una red tengan una parte común: los primeros N bits

Esa parte común se representa mediante una máscara de red La máscara de red se representa como una dirección IP, con los primeros N bits

igual a 1 y el resto de bits 0, ej. 255.255.255.0

Por tanto, una dirección de red queda definida mediante: dirección IP, máscara de red

Dirección de Red

Ej. Red de área local con un router y varios servidores: 138.4.54.0 / 255.255.255.0

138.4.54.1

138.4.54.2 138.4.54.3 138.4.54.x

Page 7: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 7

Una interfaz, se identificará por: un nombre, de uso interno en el dispositivo (ej, ce0) una Dirección IP (ej, 138.4.54.4) un identificador de la red a la que está conectada (dirección de la red)

La dirección de red se genera a partir de: Dirección IP (ej, 138.4.54.4) una Máscara de Red (ej, 255.255.255.0)

Por tanto, una interfaz queda definida mediante: nombre, dirección IP, máscara de red

Interfaz

138.4.54.4 / 255.255.255.0

ce0

Page 8: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 8

Para encaminar el tráfico es necesario conocer las rutas hacia los posibles destinos

Dos casos: Si el destino está en una de las redes a las que estoy conectado

directamente, se lo envío directamente a través de esa red. Si el destino no está en una de las redes a las que estoy conectado

directamente, se lo intentaré enviar indirectamente a través de otro router con el que sí tengo conexión directa.

Un router guarda información sobre las rutas que conoce (tabla de encaminamiento). Cada ruta especifica: dirección de la red destino (= dirección IP + máscara) dirección IP del “gateway” (dispositivo al que tengo que reenviar el

tráfico dirigido a cualquier dirección de esa red destino) Por tanto, una ruta queda definida mediante:

dirección de red (destino), dirección IP (gateway)

Rutas

Page 9: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 9

Parámetros de un Router

Un router queda definido por: Su nombre Sus interfaces de red; cada interfaz queda definida por:

Un nombre Una Dirección IP Una Máscara de red

Su tabla de rutas; cada ruta queda definida por: Red destino (Dirección de Red) Gateway (Dir. IP)

Page 10: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 10

Fichero de configuración

// nombre del router

device name "my router"

// definición de interfaces

interface add ce0 "192.168.0.3" "255.255.0.0"

interface add ce1 "10.0.0.5" "255.0.0.0"

interface add ce2 "138.4.54.4" "255.255.255.0"

// definición de rutas

route add "11.0.0.0" "255.0.0.0" "10.0.0.1"

route add "212.166.250.0" "255.255.0.0" "192.168.0.1"

route add "138.4.63.0" "255.255.255.0" "138.4.54.1"

Page 11: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 11

¿Qué hay que hacer?

Implementar una clase que lea un fichero de configuración de un router, como el anterior, y cree un router con dicha configuración

Page 12: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 12

Diagrama de Clases

Page 13: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 13

Clases

Clases (y ficheros) proporcionados: Clase DireccionIP.java Clase DireccionIPException.java Clase DireccionRed.java Clase Interfaz.java Clase Ruta.java Clase Router.java Clase Configuracion.java Fichero de ejemplo de configuración: Device.txt Clase Entrega.java

Clases pedidas: Clase ConfigRouterException.java Clase ConfigRouter.java Clase ConfigRouterTest.java

Page 14: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 14

Entrada/Salida para ConfigRouter

Para leer el fichero java.io.File(nomfichero) java.io.FileReader(File)

Para descomponer la entrada en tokens java.io.StreamTokenizer

Page 15: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 15

final char DELIMITADOR_WORD = ‘”’;fr = new FileReader (new File(“fichero”));st = new StreamTokenizer(fr);

// una secuencia de caracteres encerrada // entre dos caracteres DELIMITADOR_WORD es//vista como un solo tokenst.quoteChar(DELIMITADOR_WORD)

// ignora comentarios del tipo “//”st.slashslashComments(true)

// ignora comentarios del tipo “/*...*/”st.slashStarComments(true)

StreamTokenizer

Page 16: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 16

Método nextTokende StreamTokenizer

El método nextToken() de StreamTokenizer puede devolver varios valores: TT_WORD: indica que el token es una palabra. TT_NUMBER: indica que el token es un número. TT_EOL: indica que se ha llegado al final de una línea.

Para que esto funcione, debe haber sido invocado el método eolIsSignificant con el argumento true.

TT_EOF: indica el final de la entrada.

Page 17: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 17

Ejemplo trivial

devicenamemy routerinterfaceaddce0192.168.0.3255.255.0.0interfaceAddce110.0.0.5255.0.0.0interfaceaddce2138.4.54.4255.255.255.0routeadd

11.0.0.0255.0.0.010.0.0.1routeadd212.166.250.025.255.0.0192.168.0.1routeadd138.4.63.0255.255.255.0138.4.54.1

// _st es un objeto de la clase StreamTokenizer

for (int lexema = _st.nextToken(); lexema != StreamTokenizer.TT_EOF;

lexema = _st.nextToken())

System.out.println (_st.sval);

Page 18: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 18

Palabras Clave

Las palabras clave utilizadas en la definición de un router son las siguientes: device interfaz route

Además, existen otras dos palabras clave, que representan operaciones: name add

Page 19: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 19

Posible algoritmo de reconocimiento:método configura

Abrir fichero para lectura Crear StreamTokenizer Leer una primera línea que comience por device

Si el siguiente token es name tratar de reconocer un nombre para el router

Mientras haya tokens Si el primer token es interfaz

Si el siguiente token es add• Tratar de reconocer una definición de interfaz para el router

Si el primer token es router Si el siguiente token es add

• Tratar de reconocer una definición de Ruta para el dispositivo

Si en algún momento se llega a una situación no deseada (token incorrecto, fin de línea, etc.) se debe lanzar una Excepción: ConfigRouterException.

Page 20: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 20

Sugerencias

Crear los siguientes métodos getWord, para leer una palabra (o secuencia de palabras

entrecomilladas) getDireccionIP, para leer una dirección IP procesaNombre, para leer líneas que comiencen por device procesaInterfaz, para leer líneas que comiencen por interfaz procesaRuta, para leer líneas que comiencen por route

Page 21: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 21

Logging

Se deberán incluir trazas en la implementación de la clase pedida ConfigRouter: se utilizará java.util.logging niveles de trazado:

SEVERE: para fallos graves, como excepciones que no se pueden tratar; se indica la excepción que se lanza.

INFO: para mostrar información de alto nivel: entrada y salida en los métodos.

FINE: para mostrar información de bajo nivel, concretamente de los tokens que se van leyendo de la entrada.

Se puede indicar en tiempo de ejecución dónde está el fichero de configuración para el paquete java.util.logging: java -Djava.util.logging.config.file=logging.properties

lprg.p3.ConfigRouterTest

Page 22: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 22

Logging: Ejemplos

11-abr-2004 23:42:17 lprg.p3.ConfigRouter getWord

INFO: Entrada

11-abr-2004 23:42:17 lprg.p3.ConfigRouter getWord

FINA: token leído: device

11-abr-2004 23:42:17 lprg.p3.ConfigRouter getWord

INFO: Entrada

11-abr-2004 23:42:17 lprg.p3.ConfigRouter getWord

FINA: token leído: name

....

11-abr-2004 23:46:40 lprg.p3.ConfigRouter getWord

INFO: Entrada

11-abr-2004 23:46:40 lprg.p3.ConfigRouter getWord

FINA: token leído: 1192.168.0.3

11-abr-2004 23:46:40 lprg.p3.ConfigRouter getDireccionIP

GRAVE: Lanzada ConfigRouterException

Page 23: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 23

Pruebas: Clase Configuracion.java

Existe una clase Configuración.java que permite comprobar la funcionalidad del Router:

Crea un router a partir de un fichero de configuración Calcula rutas para algunas direcciones IP predefinidas en el código Solicita direcciones IP por la entrada estándar y dice por qué interfaz deberá

encaminarse el tráfico dirigido hacia esa dirección IP

java lprg.p3.Configuracion –Djava.util.logging.config.file=logging.properties lprg\p3\Device.txt138.4.54.38 -> ce2: 138.4.54.4/255.255.255.010.0.3.0 -> ce1: 10.0.0.5/255.0.0.0192.168.0.1 -> ce0: 192.168.0.3/255.255.0.0192.160.0.1 -> nulldevice name my router"

interface add ce0 "192.168.0.3" "255.255.0.0"interface add ce1 "10.0.0.5" "255.0.0.0"interface add ce2 "138.4.54.4" "255.255.255.0"

route add "11.0.0.0" "255.0.0.0" "10.0.0.1"route add "212.166.250.0" "25.255.0.0" "192.168.0.1"route add "138.4.63.0" "255.255.255.0" "138.4.54.1"

Introduzca direcciones IP para averiguar la ruta:138.4.54.1 -> ce2: 138.4.54.4/255.255.255.0212.166.250.21 -> ce0: 192.168.0.3/255.255.0.0

Page 24: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 24

Excepcionesen ConfigRouter.java

Deben lanzarse excepciones: IOException: si no se puede abrir el fichero porque no existe o

no tenemos permisos ConfigRouterException: no se reconoce el tipo de elemento de

una línea

Tratamiento: IOException: no se pueden tratar, el programa debe terminar ConfigRouterException: tampoco se tratan, el programa termina DireccionIPException deben capturarse y propagarse en forma

de RouterException

Cada vez que se lance una Excepción se generará una línea de log con el nivel SEVERE

Page 25: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 25

Pruebas enConfigRouterTest.java

Se proporcionan algunas pruebas muy simples: Fichero vacío Fichero que no existe

Deberá completarse con casos de prueba adicionales que permitan comprobar toda la funcionalidad de la clase ConfigRouter

¿Cómo escribir en un fichero?

FileWriter fw = new FileWriter(<nomfichero>);

BufferedWriter salida = new BufferedWriter(fw);

salida.write(<String>);

salida.write (<String>);

...

salida.close();

Page 26: Laboratorio de Programación Práctica 3 Entrada/Salida y Manejo de excepciones Dpto. de Ingeniería de Sistemas Telemáticos lprg

Abril 2004 Práctica 3 26

Entrega

Todas las clases pertenecerán al package lprg.p3 Se deberán dejar en el directorio lprg/p3 de su cuenta del

laboratorio Se piden los ficheros

ConfigRouter.java ConfigRouterException.java ConfigRouterTest.java

Fecha límite: 30 de abril de 2004, 23:59