Your SlideShare is downloading. ×
0
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Networking
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Networking

2,441

Published on

Published in: Technology, Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,441
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
54
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Objetivos Entender los elementos del trabajo con redes en Java. Implementar aplicaciones de red en Java. Aprender a implementar aplicaciones colaborativas basadas en redes. Construir un servidor multihilado.
  • Comunicación entre procesos Mecanismos de comunicación entre procesos [IPC: InterProcess Communication] Cuando en un sistema tenemos distintos procesos, necesitamos disponer de mecanismos que hagan posible la comunicación entre ellos. Se pueden utilizar distintos mecanismos de comunicación entre procesos: Pipes anónimos [Anonymous pipes] Permiten redireccionar la entrada o salida estándar de un proceso (utilizando | en la línea de comandos, por ejemplo). Sockets Usan la familia de protocolos TCP/IP (la que se utiliza en Internet). Su diseño original proviene del BSD UNIX [Berkeley Software Distribution]. Estándares de paso de mensajes MPI (Message Passing Interface, muy utilizado en clusters y supercomputadores) o PVM (Parallel Virtual Machina, otro estándar utilizado en multiprocesadores y multicomputadores).
  • Llamadas a procedimientos remotos (RPC: Remote Procedure Call) Permiten realizar la comunicación entre procesos como si se tratase de simples llamadas a funciones. -En Java, se utiliza un mecanismo conocido como RMI [Remote Method Invocation]. -En la plataforma .NET, se utiliza .NET Remoting (un mecanismo similar a RMI) -El RPC de Windows cumple con el estándar OSF DCE [Open Software Foundation Distributed Computing Environment], lo que permite la comunicación entre procesos que se ejecuten en sistemas operativos diferentes a Windows. Middleware Software que se utiliza para conectar los componentes de un sistema distribuido. -CORBA [Common Object Request Broker Architecture], estándar del OMG [Object Management Group]. -Servicios web [Web services], promovidos por el W3C (el consorcio que propone los estándares usados en la web). -J2EE [Java 2 Enterprise Edition] estandariza los servicios que ha de ofrecer un servidor de aplicaciones Java. © Sun Microsystems -COM / DCOM [Component Object Model / Distributed COM] establece un estándar binario mediante el cual se puede acceder a los servicios ofrecidos por un componente. © Microsoft Corporation Algunas consideraciones Los mecanismos de comunicación no siempre son fiables (algunos paquetes se pierden) La comunicación entre procesos consume tiempo (la latencia no es cero) La capacidad del canal de comunicación no es infinita (el ancho de banda es un recurso muy valioso) Las comunicaciones no siempre se realizan a través de medios seguros. Los procesos de una aplicación distribuida suelen clasificarse como clientes o servidores, si bien pueden desempeñar ambos roles en distintos momentos. El cliente es el que solicita algún servicio proporcionado por otro proceso. El servidor es el que atiende las peticiones de los clientes.
  • Comunicaciones y multitarea Atributos y conexiones for ( ; ; ) { aceptar una petición crear una tarea } Servicio Acepta Mensajes mensaje Tarea manipuladora Tarea manipuladora Tarea manipuladora
  • Sockets Java proporciona un nivel de conexión basado en puertos y sockets. En su paquete java.net Un puerto es una abstracción de un lugar físico a través del que se puede establecer una conexión entre un cliente y un servidor. Se dice que el servidor proporciona el puerto y el cliente se enlaza al mismo. En general, en la arquitectura cliente-servidor existe un objeto activo servidor que proporciona un servicio y unos clientes que lo solicitan. Para conseguir establecer la comunicación entre ambos objetos existen sockets servidores y sockets de cliente representados por las clases SocketServer y Socket, situadas en el paquete java.net..
  • Esquema de comunicaciones basadas en sockets La comunicación bidireccional entre el cliente y el servidor se implementa en Java utilizando los flujos de entrada y salida (InputStream y OutputStream) Para cada socket se puede acceder a los flujos de entrada con getInputStream () y a los de salida con getOutputStream (). Cuando la conexión queda establecida, los dos sockets conectados pueden comunicarse entre sí mediante operaciones de lectura y escritura idénticas a las cualquier otro “stream” en Java (read y write). Hay que establecer un protocolo de comunicación entre el cliente y el servidor para poder interpretar esos mensajes.
  • La clase InetAddress Obtener un objeto InetAddress a través de un nombre de dominio static InetAddress getByName( String nombre) static InetAddress[] getAllByName( String nombre) Obtener un objeto InetAddress a través de una dirección IP static InetAddress getByAddress( byte[] dirIP) Obtener un objeto InetAddress que haga referencia a la máquina local static InetAddress getLocalHost() Obtener el nombre de dominio o la dirección IP de una máquina String getHostName() String getHostAddress() Convertir InetAddress a String String toString()
  • Sockets Stream (TCP, Transport Control Protocol) El protocolo TCP [Transmission Control Protocol] proporciona un conjunto de primitivas de servicio (operaciones básicas) con las que se pueden construir aplicaciones que requieran servicios orientados a conexión (aquéllas en las que primero se establece una conexión y luego se transmiten los datos). TCP también se encarga de reordenar los datos si éstos se reciben desordenados y de pedir automáticamente que se retransmitan los datos si se produce un error en la transmisión. Funcionamiento El cliente crea un Socket para solicitar una conexión con el servidor al que desea conectarse. Cuando el ServerSocket recibe la solicitud, crea un Socket en un puerto que no se esté usando y la conexión entre cliente y servidor queda establecida. Entonces, el SocketServer vuelve a quedarse escuchando para recibir nuevas peticiones de clientes.
  • Una aplicación sencilla con sockets TCP Servidor:
  • Tarea de servicio:
  • Cliente de Telnet: Cliente Java:
  • Sockets Datagrama (UDP, User Datagram Protocol) El protocolo UDP [User Datagram Protocol] proporciona servicios no orientados a conexión, no garantiza la entrega de los paquetes, ni su llegada en orden, ni la no existencia de duplicados. UDP se utiliza en algunas aplicaciones, como SNMP [ Simple Network Management Protocol ] o RTP [ Real-time Transport Protocol ] El tipo más sencillo de sockets, puesto que no es necesario establecer ninguna conexión para enviar y recibir datos. En Java, un objeto de tipo DatagramSocket representa un socket UDP y puede enviar o recibir datos directamente de otro socket UDP. Los datos se envían y reciben en paquetes autocontenidos denominados datagramas (igual que el correo convencional). Los datagramas se representan en Java mediante la clase DatagramPacket, que consiste simplemente en un array de bytes dirigido a una dirección IP y a un puerto UDP concretos. La clase MulticastSocket se puede emplear para enviar un mismo datagrama a muchos destinatarios simultáneamente.
  • Una aplicación sencilla con sockets UDP Receptor:
  • Emisor:
  • Sockets UDP multipunto Para unirse a un grupo multicast se debe crear primero un socket de tipo MulticastSocket en el puerto deseado e invocar después al método: joinGroup. Cuando un proceso envía un mensaje a un grupo multicast, recibirán el mensaje todos los procesos suscritos al grupo. Para recibir mensajes multicast es necesario pertenecer a un grupo, sin embargo, esto no es necesario para enviar mensajes al grupo. Un proceso puede abandonar el grupo mediante el método leaveGroup .
  • Una aplicación Multicast sencilla
  • La clase URL
  • RMI - Remote Method Invocation Internamente, RMI utiliza serialización de objetos para encargarse de la transmisión de datos a través de la red (de cara al programador, el acceso al objeto remoto es como una llamada a un método local). Para localizar un objeto al que se desee acceder, RMI proporciona un registro que se usa a modo de páginas amarillas. Como respuesta de las llamadas a métodos de un objeto remoto, RMI devuelve objetos y se encarga de obtener los bytecodes que sean necesarios (cuando se obtiene una referencia a un objeto cuyos bytecodes no están disponibles en la máquina virtual del receptor). El servidor crea algunos objetos y los hace accesibles a través del registro. A continuación, se queda esperando a recibir peticiones. El cliente obtiene una referencia a un objeto remoto (que está alojado en el servidor) y la utiliza para invocar métodos del objeto de forma remota.
  • Objetos e interfaces remotos Para que Servidor y Cliente se comuniquen, RMI proporciona un conjunto de mecanismos que facilitan las tareas del programador. El Stub Permite a los clientes invocar métodos de objetos remotos. Es una implementación parcial de los objetos remotos que permite: 1. Compilar los clientes sin disponer del código de los objetos remotos. 2. Abstraer al programador de los detalles de comunicación. Cuando la aplicación cliente invoca un objeto definido en el stub , el stub se encarga de hacer llegar la invocación a su destino.
  • La capa de referencia remota Se encarga de implementar un protocolo específico para la gestión de referencias remotas. Es totalmente independiente del stub y del skeleton Debe encargarse de: 1. Saber a qué corresponde una referencia determinada. 2. En el Cliente: Convertir las referencias locales empleadas por el stub en referencias remotas. 3. En el Servidor: Convertir las referencias remotas recibidas en el skeleton en referencias locales. 4. Comunicarse con la capa de transporte subyacente. El skeleton Permite a los servidores recibir invocaciones remotas a métodos implementados en objetos locales. Proporciona los argumentos necesarios para la ejecución de los métodos. Se encarga de devolver el resultado de la ejecución de un método. No hace falta implementarlo en Java 2. En esta versión el servidor habla directamente con la capa de referencia remota . Implementación Es necesario utilizar clases de tres paquetes diferentes: Java.rmi.* : Proporciona funcionalidad para la construcción de aplicaciones Cliente . Java.rmi.server.* : Proporciona funcionalidad para la construcción de aplicaciones Servidores . Java.rmi.registry.* : Proporciona funcionalidad para publicar y localizar un objeto remoto. Todos estos paquetes pertenecen al kit de desarrollo estándar de Java. Desarrollo de aplicaciones distribuidas con RMI Crear los distintos componentes de la aplicación, teniendo en cuenta que, para que a un objeto se pueda acceder de forma remota con RMI, es necesario que implemente una interfaz derivada de java.rmi.Remote. 2. Compilar con javac y generar los stubs con rmic. 3. Hacer accesibles los objetos remotos (usualmente, dejando los bytecodes correspondientes a los interfaces remotos y a los stubs en algún servidor web). 4. Arrancar la aplicación, que incluye el registro RMI, el servidor y el cliente.
  • Una aplicación sencilla con RMI Definir la interface de servicios remota: La interface Calculadora extiende a Remote y todos sus métodos pueden generar una excepción RemoteException
  • Implementar la interface remota: Implementar el servidor:
  • Implementar el cliente: Generar las clases, el Stub y arrancar el servidor de nombres: Compilar el paquete Generar el Stub y arrancar el servidor de nombres : Ejecutar la Clase ServidorCalculadora Ejecutar el Cliente
  • Práctica 16: Implementación de aplicaciones cliente/servidor con Java Objetivos Hacer uso de las clases del paquete java.net para la implementación de aplicaciones Cliente/Servidor Acceder remotamente a objetos en un entorno distribuido Ejercicios Tomando como referencia es ejercicio 2 de la pág 15-22 implementar una aplicación que permita listar via telnet los contactos de la agenda. Implemente una sala de chat usando Swing y RMI Complemente la sala de chat permitiendo el registro de usuarios cuyos datos son almacenados por Serialización. Tomando como referencia los casos de aplicación de: Gestión Académica y Empresa XYZ, liste e implemente los servicios que podría ofrecer en un entorno distribuido. Implemente una aplicación que controle remotamente el encendido y apagado del tanque del ejercicio 4 de la pág 12-19.
  • Transcript

    • 1. Networking Ing. Rolando Steep Quezada Martínez [email_address] Programación Avanzada en Java
    • 2. Comunicación entre procesos <ul><li>El desarrollo de aplicaciones concurrentes involucra el uso de mecanismos de comunicación. Estos mecanismos, conocidos genéricamente como mecanismos de comunicación entre procesos (IPC) permiten que los distintos procesos que conforman una aplicación &amp;quot;hablen entre sí&amp;quot;. </li></ul><ul><li>Los procesos en los que se descompone una aplicación pueden ejecutarse en un mismo ordenador (siempre que tengamos un sistema operativo multitarea) o en máquinas diferentes. En este último caso, la comunicación entre procesos involucra el uso de redes de ordenadores . </li></ul>
    • 3. &nbsp;
    • 4. Comunicaciones y multitarea <ul><li>La razón principal de utilizar un hilo es invocar asincrónicamente a un método que realiza una determinada tarea. </li></ul><ul><li>La tarea puede abarcar desde un único método hasta una sesión completa. </li></ul><ul><li>Los diseños basados en tareas se encuentran en entornos orientados a eventos, computación en paralelo y en sistemas que hacen un fuerte uso de entrada y salida. </li></ul>
    • 5. Sockets <ul><li>Un socket (literalmente, “enchufe”) es un extremo de una comunicación en Internet, por lo que se identifica con una dirección IP (un número entero de 32 bits) y un puerto (un número entero de 16 bits). </li></ul><ul><li>Java encapsula el concepto de dirección IP con la clase java.net.InetAddress </li></ul><ul><li>Los sockets direccionan procesos mediante: </li></ul><ul><ul><li>Dirección IP o nombre DNS </li></ul></ul><ul><ul><li>Número de puerto (entre 1 y 65535) </li></ul></ul>
    • 6. Esquema de comunicaciones basadas en sockets
    • 7. La clase InetAddress <ul><li>Definida en el paquete java.net </li></ul><ul><li>Un objeto InetAddress permite obtener: </li></ul><ul><ul><li>Dirección o direcciones IP de una máquina. </li></ul></ul><ul><ul><li>Nombre o nombres de dominio de una máquina. </li></ul></ul><ul><li>Indica las conexiones entre un cliente y un servidor </li></ul><ul><li>Excepciones a capturar: </li></ul><ul><ul><li>UnknownHostException </li></ul></ul>
    • 8. Sockets Stream (TCP, Transport Control Protocol) <ul><li>Orientado a la conexión </li></ul><ul><ul><li>Flujos de bytes ( Streams ) que incorporan control de errores y control del flujo </li></ul></ul><ul><ul><li>Comunicación uno a uno </li></ul></ul><ul><li>Las clases Socket y ServerSocket permiten utiliza el protocolo TCP en Java: </li></ul><ul><ul><li>Un Socket se utiliza para transmitir y recibir datos. </li></ul></ul><ul><ul><li>Un ServerSocket nunca se utiliza para transmitir datos. Su único cometido es, en el servidor, esperar a que un cliente quiera establecer una conexión con el servidor. </li></ul></ul>
    • 9. Una aplicación sencilla con sockets TCP <ul><li>Dinámica: </li></ul><ul><li>El servidor se instala en el puerto 9999 TCP y se queda esperando peticiones en la llamada al método accept(). </li></ul><ul><li>Cuando se acepta la petición, a través del InputStream asociado al socket se lee una línea de texto enviada por el cliente. </li></ul><ul><li>Esa misma línea de texto se le envía al cliente a través del OutputStream asociado al socket. </li></ul><ul><li>Después, se cierra la conexión con el cliente y el servidor se vuelve a quedar esperando la llegada de nuevas solicitudes de eco. </li></ul><ul><li>El servidor seguirá ejecutándose hasta que reciba una petición de un cliente que solicite el eco de “BYE”. </li></ul>
    • 10. &nbsp;
    • 11. &nbsp;
    • 12. Sockets Datagrama (UDP, User Datagram Protocol) <ul><li>Sin conexión </li></ul><ul><ul><li>Bloques de datos de usuario de hasta 64 KB ( Datagramas ). No hay control de errores, ni control del flujo. </li></ul></ul><ul><ul><li>Admiten multicast (comunicación uno a varios). </li></ul></ul><ul><li>Los Datagramas son paquetes de datos que son enviados sin garantizar que la información fue bien recibida. </li></ul><ul><ul><li>La clase DatagramSocket representa el socket UDP. </li></ul></ul><ul><ul><li>La clase DatagramPacket representa la información. </li></ul></ul>
    • 13. Una aplicación sencilla con sockets UDP <ul><li>Dos procesos: </li></ul><ul><li>Emisor: pide al usuario que introduzca un texto por teclado y se lo envía al receptor. </li></ul><ul><li>Receptor: devuelve al emisor el texto que éste le envió convertido a mayúsculas. </li></ul><ul><li>Ambos procesos se ejecutan en la misma máquina y se conectan mediante el puerto 4321. </li></ul>
    • 14. &nbsp;
    • 15. Sockets UDP multipunto <ul><li>Clase MulticastSocket (subclase de DatagramSocket ) </li></ul><ul><li>Para enviar mensajes multicast . Un mensaje multicast se envía a todos los miembros del grupo multicast. </li></ul><ul><li>Un grupo multicast se especifica mediante una dirección de clase D (multicast) y un puerto. </li></ul><ul><li>Direcciones de clase D: de 224.0.0.0 a 239.255.255.255 (224.0.0.0 esta reservada). </li></ul>
    • 16. Una aplicación Multicast sencilla <ul><li>Cada instancia crea un MulticastSocket asociado a la dirección 228.0.0.1 en el puerto 6789 para formar un grupo multicast. </li></ul><ul><li>Inicialmente, un proceso envía el mensaje que recibe como parámetro la lectura del teclado y después espera la recepción de los mensajes multicast hasta que algún proceso envíe la palabra FIN. </li></ul>
    • 17. La clase URL <ul><li>Cuando alguien accede a un servidor web, generalmente lo hace para obtener un documento, para lo que usa una URL (que en java se representa mediante la clase java.net.URL). </li></ul><ul><li>De esta forma no tenemos que conocer los detalles del protocolo HTTP que utilizan los servidores web (ni la dirección IP del servidor, ya que la clase URL se encarga de traducir el nombre del host a una dirección IP usando el servicio DNS). </li></ul><ul><li>Con URL.openConnection() podemos establecer una conexión TCP a través de la cual también se pueden transmitir datos. </li></ul>
    • 18. RMI - Remote Method Invocation <ul><li>RMI o Remote Method Invocation es la solución disponible en Java para desarrollar sistemas de objetos distribuidos. </li></ul><ul><li>Cuando utilizamos sockets, hemos de preocuparnos de cómo se transmiten físicamente los datos entre los extremos de una conexión (a nivel de bytes, ya que usamos los “streams” estándar) </li></ul><ul><li>RMI permite olvidarnos de los detalles de la transmisión de datos y centrarnos en el diseño de la lógica de nuestra aplicación, puesto que nos permite acceder a un objeto remoto como si de un objeto local se tratase. </li></ul>
    • 19. Objetos e interfaces remotos <ul><li>Para que un objeto sea accesible de forma remota, ha de implementar un interfaz remoto (derivado de java.rmi.Remote) </li></ul><ul><li>Cuando una llamada a un método realizada desde el cliente devuelve un objeto remoto, en vez de obtener una copia del objeto, se obtiene una referencia al objeto remoto (un stub que hace de proxy y se comporta igual que el objeto remoto). </li></ul>
    • 20. &nbsp;
    • 21. Una aplicación sencilla con RMI <ul><li>Se desea brindar los servicios de cálculo de enteros de una calculadora básica, estos servicios deberán ser ejecutados en un servidor y accedidos a remotamente por n clientes. </li></ul><ul><li>Los servicios disponibles son: </li></ul><ul><ul><li>int sumar(int a, int b) </li></ul></ul><ul><ul><li>int restar(int a, int b) </li></ul></ul><ul><ul><li>int multiplicar(int a, int b) </li></ul></ul>
    • 22. &nbsp;
    • 23. &nbsp;
    • 24. Resumen <ul><li>El paquete java.net del jdk de Java contiene las clases necesarias para trabajar en red </li></ul><ul><li>La clase InetAddress representa un dirección Ip o un host </li></ul><ul><li>Los sockets TCP están orientados a conexión. </li></ul><ul><li>Los sockets UDP permiten el envío asíncrono de mensajes y multicast </li></ul><ul><li>La clase URL encapsula la forma de conexión y flujo de bytes de una conexión TCP </li></ul><ul><li>RMI permite la invocación remota de operaciones </li></ul>
    • 25. Práctica 16 <ul><li>Objetivos </li></ul><ul><ul><li>Implementar aplicaciones cliente/servidor utilizando el paquete java.net </li></ul></ul><ul><ul><li>Implementar aplicaciones distribuidas con RMI </li></ul></ul>
    • 26. &nbsp;

    ×