670 likes | 895 Views
ENTRADA/SALIDA. ENTRADA/SALIDA DESDE O HACIA UN PROCESO ENTRADA/SALIDA ENTRE PROCESOS. información. PROGRAMA. ENTRADA /SALIDA. Para obtener información:. stream. FUENTE. leer. FUENTE: archivo, dispositivo entrada, socket. información. PROGRAMA. ENTRADA /SALIDA.
E N D
ENTRADA/SALIDA • ENTRADA/SALIDA DESDE O HACIA UN PROCESO • ENTRADA/SALIDA ENTRE PROCESOS Ing. Estela D'Agostino
información PROGRAMA ENTRADA /SALIDA • Para obtener información: stream FUENTE leer FUENTE: archivo, dispositivo entrada, socket. Ing. Estela D'Agostino
información PROGRAMA ENTRADA /SALIDA • Para escribir información: stream DESTINO escribe DESTINO: archivo, dispositivo salida, socket. Ing. Estela D'Agostino
ENTRADA /SALIDA • Entrada/Salida básica: desde un dispositivo de entrada o hacia un dispositivo de salida (teclado / monitor). • Entrada/Salida desde archivos dentro de un mismo proceso • Entrada/salida entre procesos (utilizando sockets). Ing. Estela D'Agostino
ENTRADA /SALIDA Antes de la version java 1.4 • Los programas se comunican con flujos y estos flujos actúan como interfaz con el dispositivo o clase asociada • Operación independiente del tipo de datos y del dispositivo • Mayor flexibilidad (p. e. redirección, combinación) Ing. Estela D'Agostino
ENTRADA /SALIDA • Leer • abrir un stream • mientras haya información • leer información • cerrar el stream • Escribir • abrir el stream • mientras haya información • escribir información • cerrar el stream Ing. Estela D'Agostino
ENTRADA /SALIDA (INF. II) • Java tiene acceso a la entrada/ salida estándar a través de • la clase java. lang. System • Los flujos estándar son campos estáticos de System • .System. in implementa la entrada estándar • .System. out implementa la salida estándar • .System. err implementa la salida de error Ing. Estela D'Agostino
Clasificación de flujos • Representación de la información • .Flujos de bytes • .Flujos de caracteres • Propósito • Entrada - ( InputStream, Reader ) • Salida - ( OutputStream, Writer ) • Entrada/ Salida - ( RandomAccessFile ) Ing. Estela D'Agostino
Flujos de bytes Ing. Estela D'Agostino
Flujos de caracteres Ing. Estela D'Agostino
Combinación de flujos • • Los flujos se pueden combinar para obtener lafuncionalidad deseada Ing. Estela D'Agostino
Tipo de acceso • Acceso • Secuencial • Directo o aleatorio - ( RandomAccessFile) Ing. Estela D'Agostino
Flujos principales • InputStreamReader • Lee bytes de un flujo InputStream y los convierte en caracteres Unicode • Métodos de utilidad read () lee un único caracter • ready() indica cuando está listo el flujo para lectura Ing. Estela D'Agostino
Flujos principales • BufferedReader • Entrada mediante búfer, mejora el rendimiento • Método de utilidad • readLine() lectura de una línea como cadena InputStreamReader isr = new InputStreamReader( System. in); BufferedReader Teclado = new BufferedReader (isr); • String cadena = Teclado. readLine(); Ing. Estela D'Agostino
Entrada/Salida desde archivos dentro de un mismo proceso Ing. Estela D'Agostino
Archivos de texto • FileReader • Util para leer archivos de texto • Constructor: FileReader( String nombreArchivo) • PrintWriter • Implementa un flujo de salida de caracteres • Métodos de utilidad • .print(), println(), close() Ing. Estela D'Agostino
Archivos de texto • FileWriter • Util para escribir archivos de texto • Constructores • FileWriter( String nombrearchivo) -- reescribe • FileWriter( String nombrearchivo, boolean añadirFinal) -- añade Ing. Estela D'Agostino
Archivos • Clase File • Constructores • File( String ruta) • File( String ruta, String nombre) • File( File directorio, String nombre) • Constructores de otras clases • FileReader( File archivo) • FileWriter( File archivo) Ing. Estela D'Agostino
Métodos • canRead() comprueba si el archivo se puede leer • canWrite() comprueba siel archivo se puede escribir • delete() borra dicho archivo • getPath() devuelve la ruta del archivo • mkdir() crea un directorio con la ruta del objeto que lo recibe • isDirectory() comprueba si dicho archivo es un directorio Ing. Estela D'Agostino
Flujos • Clase ObjectOuputStream • Método - writeObject() • Ejemplo: flujoSalida. writeObjetct (objetoClase); • Clase ObjectInputStream • Método - readObject() • Ejemplo: objetoClase = (Clase) flujoEntrada. readObject(); Ing. Estela D'Agostino
Serialización de objetos • Serializar es almacenar objetos de forma permanente (p. e. en un archivo o en un flujo de comunicación) • No es necesario realizar conversiones • Útil para portabilidad y para compartir objetos entre aplicaciones Ing. Estela D'Agostino
Interfaz de serialización • Cualquier clase que desee poder serializar sus objetos debe implementar el interfaz Serializable • En esta implementación el objeto define como debe almacenarse o recuperarse de un archivo • Si se trata de serializar un objeto que no lo implementa se obtiene la excepción NotSerializableException • No se serializan los miembros static Ing. Estela D'Agostino
Interfaz de serialización • •Las clases que necesiten algún tratamiento especial en la serialización deben implementar estos dos métodos private void writeObject (java. io. ObjectOutputStream salida) throws IOException private void readObject (java. io. ObjectInputStream entrada) throws IOException, ClassNotFoundException; Ing. Estela D'Agostino
Entrada/Salida entre procesos Ing. Estela D'Agostino
Comunicación entre procesos Maquinas en red Cliente - Servidor Comunicación Entre Procesos Ing. Estela D'Agostino
Protocolo • Si se quiere establecer una comunicación entre dos máquinas se debe trabajar con protocolos. • Un protocolo especifica como deben comunicarse dos componentes de red. En general se trabaja con una familia de protocolos que trabajan en forma conjunta para enviar datos de una máquina a otra. • Protocolo TCP/IP. Ing. Estela D'Agostino
Cliente - Servidor Cuando una aplicación informática, definida como un conjunto de datos y programas, tiene a estos repartidos entre dos o mas ordenadores, se dice que la arquitectura es cliente servidor. Ing. Estela D'Agostino
Proceso Servidor Proceso Cliente Cliente - Servidor Conexión Sockets Ing. Estela D'Agostino
Proceso Cliente Proceso Cliente Proceso Cliente Proceso Cliente Proceso Servidor Proceso Cliente Proceso Servidor Cliente - Servidor red Ing. Estela D'Agostino
Comunicación Entre Procesos • Los sockets son un sistema de comunicación entre procesos de diferentes máquinas de una red. Más exactamente, un socket es un punto de comunicación por el cual un proceso puede emitir o recibir información. • Es una abstracción de software para imaginarse la conexión entre dos máquinas Ing. Estela D'Agostino
Aplicaciones cliente/servidor • El programa servidor permanece escuchando a los clientes. • El programa cliente solicita servicios al servidor. Ing. Estela D'Agostino
Comunicación Entre Procesos • Paquete java.net • Java ofrece comunicaciones basadas en sockets que permiten a las aplicaciones manejar el trabajo en redes como si fueran E/S de archivos. Ing. Estela D'Agostino
Comunicación Entre Procesos • Sockets activos: pueden enviar y recibir datos a través de una conexión abierta • Sockets pasivos: esperan intentos de conexión. Cuando llega una conexión entrante le asignan un socket activo y sigue esperando por otro intento. No sirven para enviar o recibir datos. Ing. Estela D'Agostino
Comunicación Entre Procesos • Sockets de flujo: orientado a la conexión. • Protocolo TCP • Sockets de datagrama: no orientado a la conexión. • Protocolo UDP Ing. Estela D'Agostino
Sockets De Flujo • Un proceso establece una conexión con otro proceso. • Mientras la conexión existe , los datos fluyen en un flujo continuo. • Protocolo empleado TCP. Ing. Estela D'Agostino
Cliente - Servidor Servidor • El servidor corre en una máquina especifica, tiene un socket enlazado a un número de puerto • Escucha el socket del cliente esperando que éste realice una petición Ing. Estela D'Agostino
Puerto • Un puerto es una dirección de 16 bits, asociada comúnmente a una aplicación. • Un ordenador dispone de 65536 puertos. Los primeros 1024 se reservan para servicios estándares y para procesos del sistema operativo. Ing. Estela D'Agostino
Cliente - Servidor Servidor • El servidor se ejecuta y publica en que número de puerto ofrece el servicio. • Espera por petición de algún cliente. Ing. Estela D'Agostino
Cliente - Servidor Cliente • Conoce el nombre de la máquina sobre la cual corre el servidor y el número de puerto. • Cliente solicita la conexión. • Se establece la conexión. Ing. Estela D'Agostino
Cliente - Servidor Ing. Estela D'Agostino
Cliente - Servidor • Al establecer la comunicación el servidor determina un nuevo puerto para esa conexión y sigue escuchando por el puerto primitivo para atender otros clientes. Ing. Estela D'Agostino
Servidor Cliente Abrir canal de comunicación ServerSocket ref Abrir canal de comunicación Socket ref Conectar con servidor ref=new(host,port) Publicar la direcc. del canal ref = new (Puerto) Espera recibir solicitudes While, for o do Esperar peticiones ref.accept() Crear proceso hijo hijo = ref.accept() Envio y recepción de datos hijo read() | write() Envio y recepción de datos hijo read() | write() Cerrar canal de comunicación ref.close() Cerrar canal de comunicación ref.close()
Consideraciones • El servidor debe estar en ejecucion antes de que los clientes intenten conectarse. • El cliente debe crear un socket en el cual se especifique la direccion IP y el número de puerto de la aplicación que le brinda el servicio deseado. • El servidor creara un socket para el cliente, durante su tiempo de vida no se puede asignar a otros clientes. Ing. Estela D'Agostino
Consideraciones • Se establece la conexión entre el socket del cliente y el del servidor y pueden intercambiar datos. Ing. Estela D'Agostino
El paquete java.net • Proporciona una interfaz orientada a objetos para trabajar con sockets Ing. Estela D'Agostino
Java.net.ServerSocket • La utiliza el servidor para recibir peticiones de los clientes. • Esta clase tiene un método accept( ). • La llamada a este método hace que la aplicación se bloquee esperando una petición de un cliente. • Cuando esto suceda la clase ServerSocket creara un Socket y lo usara para comunicarse con el cliente. • Un servidor puede tener una única instancia de ServerSocket relacionadas con varias instancias de Sockets. Ing. Estela D'Agostino
Java.net.ServerSocket • public ServerSocket (int puerto) throws IOException • public ServerSocket (int puerto, int longitudCola) throws IOException • public ServerSocket (int puerto, int longitudCola, InetAdress dirInternet) throws IOException • public Socket accept( ) throws IOException • public InetAddress getInetAddress ( ) • public int getLocalPort ( ) • public void close ( ) throws IOException Ing. Estela D'Agostino
Java.net.Socket Implementa sockets activos. Pueden recibir y enviar información. • public Socket (String host, int puerto) • public Socket (InetAddress direccion, int puerto) • public InetAdress getInetAdress ( ) • public InputStream getInputStream ( ) • public OutputputStream getOutputStream ( ) • public void close ( ) Ing. Estela D'Agostino
Implementación cliente Socket miCliente; try { miCliente = new Socket( "maquina",numeroPuerto ); } catch( IOException e ) { System.out.println( e ); } Ing. Estela D'Agostino
Implementación servidor Socket miServicio; try { miServicio = new ServerSocket( numeroPuerto ); } catch( IOException e ) { System.out.println( e ); } Ing. Estela D'Agostino