La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

CJ02 – Técnicas avanzadas en java 1.4 y 5.0

Presentaciones similares


Presentación del tema: "CJ02 – Técnicas avanzadas en java 1.4 y 5.0"— Transcripción de la presentación:

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

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

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

4 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.

5 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.

6 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.

7 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

8 ¿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.

9 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.

10 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.

11 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.

12 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,

13 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.

14 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().

15 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.

16 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.

17 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(); }}

18 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.

19 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.

20 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() );}}

21 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(); }

22 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.

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

24 Bibliografía The Java Tutorial http://java.sun.com/docs/books OMG
Examples from Java Network Programming Java 109 : Networking with Java Ecured


Descargar ppt "CJ02 – Técnicas avanzadas en java 1.4 y 5.0"

Presentaciones similares


Anuncios Google