CJ02 – Técnicas avanzadas en java 1.4 y 5.0

Slides:



Advertisements
Presentaciones similares
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Advertisements

APLICACIONES DISTRIBUIDAS
Curso de Java Java – Redes Rogelio Ferreira Escutia.
Arquitectura Cliente Servidor
Nau Gran dHivern Intr. a la creación y gestión de páginas web Introducción a la web.
Internet y tecnologías web
Java nos ofrece System.out para escribir en pantalla, pero también tenemos System.in para leer. System.in es un objeto de una clase de java que se llama.
Archivos Binarios. Introducción En clase ya vimos el uso de archivos de texto en Java, pero el uso de archivos es mucho más poderoso que eso, al utilizar.
Programación Interactiva Aplicaciones Cliente-Servidor
“GUI para Conexiones y Transferencia de Datos Seguros”
CGI I La mayor parte de los elementos HTML de que disponemos permite al visitante visualizar los contenidos de un sitio, pero no interactuar con él. Dicho.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Common Object Request Broker Architecture
Sockets y Threads en JAVA
SOCKETS INTRODUCCIÓN DEFINICIÓN TIPOS DE SOCKETS USO DE SOCKETS.
Introducción a Programación Concurrente
Protocolos de Comunicación
Introducción a Remoting
Entornos orientados a objetos
UNIVERSIDAD LATINA (UNILA)
Base de Datos Distribuidas
Java 2 Platform Enterprise Edition
RMI (Remote Method Invocation)
PROTOCOLOS Un protocolo es un conjunto de reglas que hacen que la comunicación en una red sea más eficiente.
Almacenamiento virtual de sitios web: «Hosts» virtuales Gustavo Antequera Rodríguez.
Aplicación de Domótica Iluminación Remota FASE 1.
Qué pasa cuando varios clientes tratan de conectarse al mismo teimpo a un servidor Una forma es ir atendiéndolos de a uno en un ciclo: como en el programa.
El Socket Un socket es un extremo de un link de comunicación entre dos programas que corren en una red. El socket esta asociado (amarrado, bound) a ub.
CGI.   Cuando el World Wide Web inició su funcionamiento como lo conocemos, empezando a tomar popularidad aproximadamente en 1993, solo se podía apreciar.
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors Christophe Fontano Julien Alagnou Socket.
INSTITUTO TECNOLOGICO DE TEHUACAN Ingeniería en sistemas computacionales Curso de apoyo a la titulación EXCEPCIONES EN JAVA Diciembre de 2008.
Sistemas Operativos Distribuidos Plataforma Cliente/Servidor
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
En Java las estructuras de repetición son las mismas que en C/C++.
Sistemas Operativos Distribuidos Prácticas Justo N. Hidalgo Sanz Universidad Antonio de Nebrija 2002/03.
Sistemas Operativos Centralizados y Distribuidos Carlos David Zepeda.
1 Streams en Java Agustín J. González ELO Generalidades Un Stream es simplemente una fuente o destino de bytes. Los streams más comunes son los.
1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.
Sockets en Java. Sockets ● Para programar aplicaciones en red en Java se utilizan los Sockets. ● Un socket permite establecer y manejar una conexión entre.
Sincronización de Objectos Compartidos usando MatchMaker a través de Web Services Thomas Pieper DCC, Universidad de Chile.
Invocación de Métodos Remotos RMI: Remote Method Invocation
Control de flujo: Bucles
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Capítulo 1 “Elementos de Programación”
66.69 Criptografía y Seguridad Informática FIREWALL.
Entrada / Salida. Java adopta de Unix el concepto de stream Un stream es un flujo de datos (secuencia de bytes) que va de una fuente a un destino. Desde.
Despliegue de la aplicación Web
Sockets. / Los sockets (zócalos, referido a los enchufes de conexión de cables) son mecanismos de comunicación entre programas a través de una red TCP/IP.
TCP/IP Introducción TCP/IP Introducción. TCP/IP vs OSI Aplicación Presentación Sesión Transporte Red Enlace Física Aplicación Acceso a la red Física TCP/IP.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad Nacional de San Juan Facultad de Ciencias Exactas, Físicas y Naturales “WEB SERVICES” Integrantes: Ene Adriana Guevara Vanina Martínez Cintia.
1 Capítulo 21: Interacción Cliente Servidor ICD 327: Redes de Computadores Agustín J. González.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Andres Marín L. Programación sockets en java.
LABORATORIO DE ESTRUCTURA DE COMPUTADORES II Desarrollo de aplicación Cliente-Servidor.
INTEGRANTES : Selvin Rivas José Vásquez Francisco Pérez J’ Alberto Patal.
Punto 3 – Servicios de Terminal Remoto Juan Luis Cano.
UNIVERSIDAD TECNOLÓGICA ECOTEC. ISO 9001:2008 Terminología informática básica FUNDAMENTOS TECNOLÓGICOS DE INFORMACIÓN.
QUE ES EL TELNET El protocolo Telnet es un protocolo de Internet estándar que permite conectar terminales y aplicaciones en Internet.
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
Servicios Web Conjunto de aplicaciones o de tecnologías con capacidad para interoperar en la Web. Estas aplicaciones o tecnologías intercambian datos entre.
En informática, es un protocolo de red para la transferencia de archivos entre sistemas conectados a una red TCP (Transmission Control Protocol)
Patrón de diseño BROKER
1 Introducción a las Comunicaciones en Red. import java.net.InetAddress; import java.net.UnknownHostException; public class PruebaSockets { public static.
DOCENTE: EMILIO ISMAEL BUSTAMANTE MONTES
Transcripción de la presentación:

CJ02 – Técnicas avanzadas en java 1.4 y 5.0 Parte 3 – Networking

Contenido Introducción Arquitectura Cliente-Servidor Evolución Networking Socket en Java

Introducción Objetivos Networking: Crear aplicaciones distribuidas Comunicar o interoperar aplicaciones por redes conocidas (LAN, Internet, etc.)

Arquitectura cliente-servidor Es una combinación de sistemas que pueden colaborar entre si para dar a los usuarios toda la información que ellos necesiten sin que tengan que saber donde esta ubicada. Es una arquitectura de procesamientos cooperativo donde uno de los componentes pide servicios a otro. Como vemos en la imagen, tenemos un servidor, el cual brinda servicios como ser compartir archivos, conexión a internet, ect. y varios clientes, los cuales consumen dichos servicios.

Arquitectura cliente-servidor Cuál es el flujo de comunicación? 1-Cliente inicia un requerimiento de servicio. 2-Servidor responde pedido del cliente 3-Un servidor da servicio a múltiples clientes en forma concurrente 4-El Cliente debe “encontrar” al servidor Como vemos, el servidor publica sus servicios y los clientes son quienes consumen dichos servicios.

Ventajas cliente-servidor Se aprovecha la potencia de cómputo de las estaciones de trabajo Se ubica el procesamiento cerca de las fuentes de trabajo reduciendo tráfico y tiempo de respuesta Facilita la gestión de cambios de software Alienta la aceptación de sistemas abiertos. Libera a los usuarios de las arquitecturas propietarias Dentro de las ventajas de este tipo de arquitectura, encontramos: -Centralización del control: el servidor es quien controla el acceso, recurso y la integridad de los datos, de manera que éste restringe el acceso a sus servicios. -Escalabilidad: se puede aumentar la capacidad de clientes y servidores de forma independiente. Los servicios ofrecidos por el servidor pueden ser consumidos por 3 clientes o n clientes. -Fácil mantenimiento: al estar distribuidas las funciones, es posible reemplazar, reparar, actualizar o trasladar un servidor, mientras que sus clientes no se verán afectados. -Al centralizar las funcionalidades en el servidor, a la hora de realizar un cambio de software consumido por los clientes, sólo hay que cambiar la versión en el servidor, sin que los clientes sean afectados.

Desventajas cliente-servidor El servidor puede convertirse en cuello de botella Costo elevado Software y hardware específico Sin embargo, dentro de las desventajas encontramos: Puede convertirse en un cuello de botella, dado que cuando una gran cantidad de clientes envían peticiones simultaneas al mismo servidor, puede ser que cause muchos problemas para éste (a mayor número de clientes, más problemas para el servidor). Cuando un servidor está caído, las peticiones de los clientes no pueden ser satisfechas. El software y el hardware de un servidor son generalmente muy determinantes. Un hardware regular de una computadora de uso doméstico puede no servir a cierta cantidad de clientes. Normalmente se necesita software y hardware específico, sobre todo en el lado del servidor, para satisfacer el trabajo

¿Que es un proceso distribuido? Modelo de sistemas y/o de aplicaciones, en el cual las funciones y los datos pueden estar distribuidos a través de múltiples recursos de cómputo, conectados en un ambiente de redes LAN o WAN. Un proceso distribuido, es una forma de proceso en la que los datos y las funciones están distribuidos en los distintos elementos de una configuración o sistema que implica la presencia de una red de área local o una red de área amplia. Es decir, que tenemos un proceso el cual se esta ejecutando en varios sistemas, los cuales estan conectados en una misma red, ya sea una red local LAN o WAN.

Evolución networking Sockets Punto de comunicación por el cual un proceso puede enviar o recibir información Canal de comunicación bidireccional Comunicación por TCP/IP Requieren del conocimiento por parte del cliente de la máquina y puerto donde está el servidor. La comunicación cliente/servidor debe implementar un protocolo tratado en tiempo de programación Un socket , es un método para la comunicación entre un programa del cliente y un programa del servidor en una red. Un socket se define como el punto final en una conexión. Proporcionan una comunicación de dos vías, punto a punto entre dos procesos. Los sockets son muy versátiles y son un componente básico de comunicación entre interprocesos e intersistemas. Un socket es un punto final de comunicación al cual se puede asociar un nombre. Este tiene un tipo y uno o más procesos asociados. Los tipos de socket definen las propiedades de comunicación visibles para la aplicación. Los procesos se comunican solamente entre los sockets del mismo tipo. Existen cuatro tipos de sockets: Socket de flujo da un flujo de datos de dos vías, confiable, y sin duplicados sin límites de grabación. El flujo opera en forma parecida a una conversación telefónica. El tipo del socket es SOCK_STREAM, el cual en el dominio de Internet usa TCP (Transmission Control Protocol). Socket de datagrama soporta un flujo de mensajes de dos vías. En un socket de datagrama podría recibir mensajes en diferente orden de la secuencia de la cual los mensajes fueron enviados. Los límites de grabación en los datos son preservados. Los sockets de datagrama operan parecidos a pasar cartas hacia adelante y hacia atrás en el correo. El tipo de socket es SOCK_DGRAM, el cual en el dominio de internet usa UDP (User Datagram Protocol). Socket de paquete secuencial da una conexión de dos vías, secuencial y confiable para datagramas de una longitud fija máxima. El tipo de socket es SOCK_SEQPACKET. No hay protocolo implementado para este tipo de cualquier familia de protocolos. raw socket da acceso a los protocolos de comunicación subyacente.

Evolución networking CORBA (Common Object Request Broker Architecture) Un producto de la O.M.G. (Object Management Group) Un entorno para la ejecución de P.O.O. Distribuido. Esta especificación debe ser implementada para los distintos lenguajes de programación CORBA es un estándar robusto que permite la operación entre distintos lenguajes. RMI, por otro lado, fue diseñado para una comunicación distribuida simple entre objetos Java. Aunque RMI y CORBA son muy similares, históricamente han sido tecnologías incompatibles. Al programar con RMI se debe crear código utilizando su API. Si luego se desea usar CORBA como protocolo de comunicación el código debe ser reescrito utilizando la API de CORBA. CORBA al igual que varias tecnologías aceptadas hoy en día es solo una especificación que fue creada en 1989 por OMG (Object Management Group). Como el nombre de la organización lo implica, CORBA establece estándares para la comunicación de objetos a través de procedimientos/métodos remotos.

Evolución networking RMI (Remote Method Invocation) Es un API standard para construir sistemas distribuidos en Java 100 % Java Permite que programas residentes en una computadora, realicen llamadas a metodos sobre objetos existentes en otras. Aplicaciones RMI implican dos programas separados, un servidor y un cliente. Un servidor crea objetos remotos, los hace accesibles para los clientes, y espera a que los clientes invoquen métodos sobre esos objetos. RMI, provee un mecanismo por el cual el servidor y el cliente pueden pasar información sobre esos objetos. Para ello, se debe: -localizar los objetos remotos: se pueden usar varios mecanismos para obtener las referencias a los objetos remotos, como ser: una aplicaciones puede publicar sus objetos utilizando RMI. -comunicarse con los objetos remotos: este proceso es manejado por RMI. Es similar a la invocación de métodos. -carga de clases de objetos que son pasados de un extremo a otro: RMI permite el pasaje de objetos de un punto a otro, también permite mecanismos para cargar las definiciones de dichas clases, para ser utilizadas de forma dinámica, de forma similar a Reflection.

Evolución networking Web Services Especificación para interoperar sistemas informáticos Estándar SOAP sobre HTTP Adoptado por .NET, JAVA, etc. Ideal para Internet Dentro de los mecanismos de comunicación, también tenemos los web services. Los Web Services permite la comunicación entre aplicaciones o componentes de aplicaciones de forma estándar a través de protocolos comunes (como http) y de manera independiente al lenguaje de programación, plataforma de implantación, formato de presentación o sistema operativo. Un Web service es un contenedor que encapsula funciones específicas y  hace que estas funciones puedan ser utilizadas en otros servidores. Algunas ventajas que presentan los Web services son ·        Son programables ·        Están basados en XML, que es un lenguaje abierto ·        Son auto descriptivos ·        Pueden buscar registros de otros Web services ¿Qué es SOAP? SOAP es un protocolo que define el formato XML para los mensajes de intercambio en el uso de un Web Service. Adicionalmente, es posible mediante SOAP definir un mensaje HTTP y este punto es de especial interés puesto que el protocolo imprescindible para Internet es HTTP. (MSDN, http://msdn.microsoft.com/es-es/library/bb972248.aspx)

Sockets en java Direccionar la conexión: La ubicación o nombre de la máquina remota Número del Puerto para identificar el propósito en el servidor Números de Puertos: Rango desde 0 a 65535 Para trabajar con Sockets, es necesario determinar la ubicación o el identificador de la máquina remota, junto con el puerto de acceso a la misma. Para ello el programa cliente se conecta a un servidor indicando el nombre de la máquina y el número puerto (tipo de servicio que solicita) en el que el servidor está instalado. El programa servidor se instala en un puerto determinado, a la espera de conexiones, a las que tratará mediante un segundo socket.

Sockets en java En este diagrama, vemos que se especifica una aplicación de tipo cliente-servidor. El Server, crea un socket en un puerto determinado, y queda a la espera de la conexión de sus clientes. Cuando recibe una petición, el servidor decide si la acepta o no, mediante el método accept. El cliente, para acceder al servidor, deberá crear otro socket, especificando el nombre del host junto con el puerto. Una vez realizada la conexión, se comienza en envío de datos, mediante cadenas de streams. Una vez finalizada la comunicación, se debe cerrar la conexión de ambos lados, mediante el método close().

Sockets en java estructuras básicas clientes servidor Boolean stop= false; SockeServer ss= new SocketServer(PortNumber); while (!stop){ Socket s = ss.accept(); DataInputStream input = new DataInputStream(s.getInputStream()); DataOutputStream output =output = new DataOutputStream(s.getOutputStream()); …… } En este ejemplo, vemos el código correspondiente al servidor. Para ello, creamos el socket especificando el puerto de publicación. Luego, mientras que la variable stop siga estando en true, se aceptan todas las conexiones entrantes y se reciben y envían los datos requeridos.

Sockets en java estructuras básicas clientes servidor Socket s; try { s = new Socket(ServerAddress,PortNumber); DataOutputStream output = new DataOutputStream( s.getOutputStream()); DataInputStream input = new DataInputStream(s.getInputStream()); ……… s.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Análogamente, para crear una conexión a un servidor, primero se debe crear el socket, con el nombre del host y puerto del servidor al cual nos queremos conectar. Luego de aceptada la conexión, se comienza el envío y recepción de datos, para finalmente cerrar la conexi+on.

Ejemplo: import java.io.*; import java.net.*; class Cliente { static final String HOST = "localhost"; static final int PUERTO=5000; public Cliente( ) { try{ Socket skCliente = new Socket( HOST , Puerto ); InputStream aux = skCliente.getInputStream(); DataInputStream flujo = new DataInputStream( aux ); System.out.println( flujo.readUTF() ); skCliente.close(); } catch( Exception e ) { System.out.println( e.getMessage() ); }} public static void main( String[] arg ) { new Cliente(); Veamos un ejemplo completo: El programa cliente se conecta a un servidor indicando el nombre de la máquina y el número puerto (tipo de servicio que solicita) en el que el servidor está instalado. Una vez conectado, lee una cadena del servidor y la escribe en la pantalla: Cliente: import java.io.*; import java.net.*; class Cliente { static final String HOST = "localhost"; static final int PUERTO=5000; public Cliente( ) { try{ Socket skCliente = new Socket( HOST , Puerto ); InputStream aux = skCliente.getInputStream(); DataInputStream flujo = new DataInputStream( aux ); System.out.println( flujo.readUTF() ); skCliente.close(); } catch( Exception e ) { System.out.println( e.getMessage() ); }} public static void main( String[] arg ) { new Cliente(); }}

Ejemplo: En primer lugar se crea el socket denominado skCliente, al que se le especifican el nombre de host (HOST) y el número de puerto (PORT) en este ejemplo constantes. Luego se asocia el flujo de datos de dicho socket (obtenido mediante getInputStream)), que es asociado a un flujo (flujo) DataInputStream de lectura secuencial.

Ejemplo: De dicho flujo capturamos una cadena ( readUTF() ), y la imprimimos por pantalla (System.out). El socket se cierra, una vez finalizadas las operaciones, mediante el método close(). Debe observarse que se realiza una gestión de excepción para capturar los posibles fallos tanto de los flujos de datos como del socket.

Ejemplo: El programa servidor se instala en un puerto determinado, a la espera de conexiones, a las que tratará mediante un segundo socket. Cada vez que se presenta un cliente, le saluda con una frase "Hola cliente N". Este servidor sólo atenderá hasta tres clientes, y después finalizará su ejecución, pero es habitual utilizar bucles infinitos ( while(true) ) en los servidores, para que atiendan llamadas continuamente. Tras atender cuatro clientes, el servidor deja de ofrecer su servicio: import java.io.* ; import java.net.* ; class Servidor { static final int PUERTO=5000; public Servidor( ) { try { ServerSocket skServidor = new ServerSocket( PUERTO ); System.out.println("Escucho el puerto " + PUERTO ); for ( int numCli = 0; numCli < 3; numCli++; ) { Socket skCliente = skServidor.accept(); // Crea objeto System.out.println("Sirvo al cliente " + numCli); OutputStream aux = skCliente.getOutputStream(); DataOutputStream flujo= new DataOutputStream( aux ); flujo.writeUTF( "Hola cliente " + numCli ); skCliente.close(); } System.out.println("Demasiados clientes por hoy"); } catch( Exception e ) { System.out.println( e.getMessage() );}}

Ejemplo: Utiliza un objeto de la clase ServerSocket (skServidor), que sirve para esperar las conexiones en un puerto determinado (PUERTO), y un objeto de la clase Socket (skCliente) que sirve para gestionar una conexión con cada cliente. Mediante un bucle for y la variable numCli se restringe el número de clientes a tres, con lo que cada vez que en el puerto de este servidor aparezca un cliente, se atiende y se incrementa el contador. Para ejecutar el código anterior, definimos : public static void main( String[] arg ) { new Servidor(); }

Ejemplo: Para atender a los clientes se utiliza laccept() de la clase ServerSocket, que es una rutina que crea un nuevo Socket (skCliente) para atender a un cliente que se ha conectado a ese servidor. Se asocia al socket creado (skCliente) un flujo (flujo) de salida DataOutputStream de escritura secuencial, en el que se escribe el mensaje a enviar al cliente.

resumen Introducción Arquitectura Cliente-Servidor Evolución Networking RMI-CORBA Web Services Sockets en Java

Bibliografía The Java Tutorial http://java.sun.com/docs/books OMG http://www.omg.org Examples from Java Network Programming http://www.ibiblio.org/java/books/jnp/javanetexamples/index.html Java 109 : Networking with Java http://www.javacoffeebreak.com/java109/java109.html Ecured http://www.ecured.cu/index.php/Arquitectura_Cliente_Servidor