Title: Prctica 3 EntradaSalida y Manejo de excepciones
1Práctica 3Entrada/Salida y Manejo de excepciones
- Dpto. de IngenierÃa de Sistemas Telemáticos
- http//www.lab.dit.upm.es/lprg/
Abril 2004
2Objetivos
- Se cubren los siguientes aspectos
- Lectura de un fichero de entrada
- Manejo de excepciones
- Escenario
- Configuración de un router
3Internet red de redes
A
R2
Estaciones de usuario (PC)
R1
R3
Servidores
R4
R5
Router
Conexión entre dispositivos, a través de una red
B
Camino que va siguiendo el tráfico de la
comunicación del PC A al servidor B (ruta)
4Router
- 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)
5Dirección IP
- 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
6Dirección de Red
- 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
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
7Interfaz
- 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
ce0
138.4.54.4 / 255.255.255.0
8Rutas
- 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)
9Pará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)
10Fichero 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"
11Qué 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
12Diagrama de Clases
13Clases
- 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
14Entrada/Salida para ConfigRouter
- Para leer el fichero
- java.io.File(nomfichero)
- java.io.FileReader(File)
- Para descomponer la entrada en tokens
- java.io.StreamTokenizer
15StreamTokenizer
- 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 token
- st.quoteChar(DELIMITADOR_WORD)
- // ignora comentarios del tipo //
- st.slashslashComments(true)
- // ignora comentarios del tipo /.../
- st.slashStarComments(true)
16Mé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.
17Ejemplo trivial
// _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)
- device
- 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
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
18Palabras 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
19Posible algoritmo de reconocimientomé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.
20Sugerencias
- 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
21Logging
- 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.filelogging.prope
rties lprg.p3.ConfigRouterTest
22Logging Ejemplos
- 11-abr-2004 234217 lprg.p3.ConfigRouter getWord
- INFO Entrada
- 11-abr-2004 234217 lprg.p3.ConfigRouter getWord
- FINA token leÃdo device
- 11-abr-2004 234217 lprg.p3.ConfigRouter getWord
- INFO Entrada
- 11-abr-2004 234217 lprg.p3.ConfigRouter getWord
- FINA token leÃdo name
- ....
- 11-abr-2004 234640 lprg.p3.ConfigRouter getWord
- INFO Entrada
- 11-abr-2004 234640 lprg.p3.ConfigRouter getWord
- FINA token leÃdo 1192.168.0.3
- 11-abr-2004 234640 lprg.p3.ConfigRouter
getDireccionIP - GRAVE Lanzada ConfigRouterException
23Pruebas 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.con
fig.filelogging.properties lprg\p3\Device.txt - 138.4.54.38 -gt ce2 138.4.54.4/255.255.255.0
- 10.0.3.0 -gt ce1 10.0.0.5/255.0.0.0
- 192.168.0.1 -gt ce0 192.168.0.3/255.255.0.0
- 192.160.0.1 -gt null
- device 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 -gt ce2 138.4.54.4/255.255.255.0
- 212.166.250.21 -gt ce0 192.168.0.3/255.255.0.0
24Excepcionesen 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
25Pruebas 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(ltnomficherogt)
- BufferedWriter salida new
BufferedWriter(fw) - salida.write(ltStringgt)
- salida.write (ltStringgt)
- ...
- salida.close()
26Entrega
- 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, 2359