Cliente/Servidor en Java



Documentos relacionados
Sockets en Java. Prof. Wílmer Pereira Universidad Simón Bolívar

Sockets en Java. La Creatividad proviene de un conflicto de ideas. Uso de Sockets

Sockets. Introducción. Las redes de computadoras permiten al usuario. Curso Propedéutico Maestría en Ciencias de la Computación BUAP

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA

Las clases Java Socket y ServerSocket

Federico Peinado

PROGRAMACION DISTRIBUIDA

Arquitecturas cliente/servidor

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

UNIVERSIDADE DA CORUÑA Departamento de Tecnoloxías da Información e as Comunicacións LABORATORIO DE RC: TUTORIAL DE SOCKETS EN JAVA

Tema 4 El paradigma cliente-servidor

DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA

1.- FUNDAMENTOS FUNCIONAMIENTO GENÉRICO JAVA SOCKETS Creación de Streams de Entrada...7

LABORATORIO DE RC PRÁCTICA 2: IMPLEMENTACIÓN DE UN CLIENTE Y SERVIDOR DE

EJEMPLOS PROGRAMACIÓN SOCKET - JAVA

1. Visión general de RMI

TEMA 5: Control de la Concurrencia en Java (API Estándar)

Arquitectura cliente/servidor

UNIVERSIDAD POLITÉCNICA DE PACHUCA SOCKETS EN JAVA

Programación Orientada a Eventos

Multitarea en Java. Rafa Caballero - UCM

JAVA - Serializacíon / RMI. (C) Philippe Roose , 2005

Curso de Redes Computadores 1 Tema 3 Introducción a la capa de transporte. Interfaz de programación en redes. Sockets.

Sockets. Los sockets son un mecanismo de comunicación entre procesos que se utiliza en Internet.

Examen de Redes - ETSIA 9 de septiembre - Primer Parcial

Lab 01: Programación de Sockets en TCP

Introducción de Sockets en C.

Arquitectura cliente/servidor

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

Programación Orientada a Objetos II. La Plataforma JDBC

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez

Desarrollo de Aplicaciones Distribuidas. Sockets. Daniel Avellaneda

Luego lleve el cliente a otra máquina y ejecute desde ahí usando el nombre de la máquina del servidor.

Remote Method Invocation (RMI) de Java

Modelo de Objetos Distribuidos

Llamada a métodos remotos (RMI). Curso 04/05. Tema 9. Departament d Informàtica. Universitat de València. 1. Introducción 2

El servicio de echo con sockets

MANUAL TÉCNICO DEL PROXY UTN

Universidad de Cantabria

Paso de mensajes en Java

Java RMI Remote Method Invocation. Invocación Remota de Métodos en Java

Aplicaciones Cliente/Servidor en Gambas Prof: Mileti, P.

Arquitecturas cliente/servidor

ARQUITECTURAS CLIENTE/SERVIDOR

1. Sistemas de colas de mensajes 2. Agentes móviles 3. Servicios de red 4. Espacios de objetos

Clase 22 Nivel de Aplicación WWW Tema 6.- Nivel de aplicación en Internet

Sistemas de colas de mensajes

Práctica 2: Java Remote Method Invocation (RMI)

Sistemas Operativos. Curso 2016 Procesos

Examen de Redes - Primer Parcial - ETSIA 26 de Enero de 2006

Capítulo 7: Introducción a la dinámica de servicios Web

3.9 Patrón Distributed callback

Comunicación entre procesos

Desarrollo de Servicios Web con JBuilder

Comunicacion en Java. Alejandro Escobar

Manual del Protocolo XML-RPC de Mensajería Negocios

PROGRAMACION DISTRIBUIDA

Sistemas Distribuidos Java RMI (Remote Method Invocation) Alberto Lafuente Mikel Larrea Dpto. ATC, UPV/EHU

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

CONTENIDO. Serialización. Carga dinamica de stubs RMI AVANZADO. Callbacks. Carga dinámica de Stubs

Ingeniería del Software Arquitectura Física en 3 niveles

3.- Procesos. Concepto de Proceso. Despacho (calendarización) de Procesos. Operaciones en Procesos. Procesos en cooperación

Programación Avanzada. Juan Manuel Fernández. Curso 2011 Ejemplo de uso de sockets desde aplicaciones visuales. Usan un hilo en banco.

Qué es Internet? Cómo funciona Internet?

en otra máquina exactamente de la misma manera que si se encontrará en la misma máquina

Práctica 4: Java Remote Method Invocation (RMI)

Taller de Sistemas de Información 2

Sumario... 5 Prólogo Unidad didáctica 1. Introducción a la computación distribuida Objetivos de la Unidad... 12

Práctica 5: Common Object Request Broker Architecture CORBA

Sistemas Distribuidos (Capítulo 8 de Distributed Computing de M. L. Liu)

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos.

TEMA 3. CLASES. EJERCICIOS

Comunicación entre Procesos y Sockets

Arquitectura Cliente/Servidor

Práctica 5: Servidor web concurrente en Java

11. Algunas clases estándar de Java (II)

MANUAL DE USUARIO. DESCRIPCION DEL USO DEL SERVICIO POR WEB SERVICE DOCUMENTACION TECNICA PARA EL CONSUMO DE WEB SERVICE 2015

Arquitectura Cliente/Servidor. Invocación de Métodos Remotos RMI: Remote Method Invocation. Llamadas a Métodos Remotos

Tema 3: COMUNICACIÓN ENTRE PROCESOS

CAPITULO 3 ARQUITECTURA DE COMPONENTES GIS EN INTERNET

CAPITULO 3 MOVILIDAD EN LA NAVEGACIÓN Y ALMACENAMIENTO EN BASES DE DATOS

PRACTICA CAPITULO 2 MODULO 1 PROTOCOLOS Y LA FUNCIONALIDAD DE LA CAPA DE APLICACIÓN

Programación Orientada a Objetos. Tema 7: Persistencia

El lenguaje de programación Java

Patrones de Alto nivel: Patrones de Arquitectura Patrones de nivel medio: Patrones de Diseño Patrones de bajo nivel: Idioms

2) Cual modificador limita el acceso a un método de una clase pública a los miembros de la misma clase?

Ficheros de acceso aleatorio

Especificación de la secuencia de mensajes que se han de intercambiar. Especificación del formato de los datos en los mensajes.

CAPA DE APLICACIÓN. 80 s : Aplicaciones basadas en texto o o acceso remoto o transferencia de ficheros o grupos de noticias o chat

Uso de excepciones en Java

RMI [Remote Method Invocation]

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Transcripción:

Cliente/Servidor en Java Grupo ARCOS Desarrollo de Aplicaciones Distribuidas Ingeniería Informática Universidad Carlos III de Madrid

Contenidos 1. Introducción: 1. Paradigma cliente/servidor 2. Entorno de programación Java 2. Cliente/servidor en Java 1. Introducción 2. Ejemplo con sockets 2

Contenidos 1. Introducción: 1. Paradigma cliente/servidor 2. Entorno de programación Java 2. Cliente/servidor en Java 1. Introducción 2. Ejemplo con sockets 3

Paradigmas cliente/servidor y P2P alto Espacio de objetos, aplicaciones colaborativas Servicios de red, object request broker, agentes móviles procedimientos remotos, métodos remotos Cliente-servidor, peer-to-peer Paso de mensajes bajo 4

Paradigma cliente-servidor Asigna roles diferentes a dos procesos que colaboran: Servidor: es el proveedor del servicio. Espera de forma pasiva la llegada de peticiones. Cliente: invoca peticiones al servidor y aguarda su respuesta. Servidor Cliente 1... Cliente 2 Petición de servicio Proceso cliente Proceso servidor Servicio 5

Paradigma cliente-servidor Proporciona una abstracción eficiente para facilitar los servicios de red. La asignación de roles asimétricos simplifica la sincronización. Paradigma adecuado para servicios centralizados. Ejemplos: servicios de internet como HTTP, FTP, DNS, finger, etc. Implementación mediante sockets, llamada a procedimientos remotos (RPC) o invocación de métodos remotos (RMI). 6

Paradigma peer-to-peer Asignación de roles simétrica: Los procesos participantes tienen el mismo papel Proceso 1 un mismo proceso puede actuar tanto como cliente como servidor Los recursos computacionales y los servicios son intercambiados entre los computadores. Solicitud Respuesta Solicitud Respuesta Ejemplo: servicios de intercambio de ficheros como Gnutella Proceso 2 7

Paradigma híbridos (c/s + p2p) Modelos híbridos cliente-servidor y peer-to-peer Ejemplo: servicio de intercambio de ficheros Napster 8

Paradigma del sistema de mensajes También denominado middleware orientado a mensajes (MOM) El sistema de mensajes actúa de intermediario entre los procesos que se comunican Proceso: Emisión al sistema de mensajes Almacenamiento en la cola asociada al receptor Envío al proceso receptor Receptores... Sistema de mensajes Emisores... 9

Paradigma del sistema de mensajes Comunicación asíncrona y desacoplada. Una vez que el emisor envía el mensaje al sistema de mensajes, queda libre para realizar otra tarea. Existen dos subclases de sistema de mensajes: el punto a punto y el publicación/suscripción. Sistema de mensajes punto a punto: El sistema de mensajes proporciona el middleware que gestiona cada cola de mensajes Envío y recepción están desacopladas: uso del threads o procesos hijo 10

Paradigma del sistema de mensajes Sistema de mensajes publicación/suscripción: Cada mensaje se asocia con un determinado evento. Pasos: 1. Cada participante se subscribe a los mensajes asociados a cada evento (operación suscribir). 2. Cuando el evento ocurre el middleware distribuye el mensaje a todos los subscriptores (operación publicar). Los eventos pueden ser iniciados por cualquier participante. Ejemplos de servicio: MQ*Series de IBM Microsoft s Message Queue (MSMQ) Java s Message Service (JMS) 11

Contenidos 1. Introducción: 1. Paradigma cliente/servidor 2. Entorno de programación Java 2. Cliente/servidor en Java 1. Introducción 2. Ejemplo con sockets 12

Java: características Lógica basada en 3 capas: Presentación Interfaz con el usuario Lógica de negocio Programa que responde a las peticiones del usuario Lógica de acceso a datos Interfaz con el almacenamiento de datos (ej.: base de datos) 13

Java: características 14

Contenidos 1. Introducción: 1. Paradigma cliente/servidor 2. Entorno de programación Java 2. Cliente/servidor en Java 1. Introducción 2. Ejemplo con sockets 15

Paradigma cliente-servidor Los procesos desempeñan dos roles asimétricos. Representa el paradigma de sistemas distribuidos con una mayor difusión. Acceso (por parte de los clientes) de servicios de red. Flujo de ejecución del servidor: 1. Inicio servicio. 2. Espera hasta aceptar petición de un cliente. 3. Inicia sesión de servicio con el cliente. 4. Vuelta al paso 2. 16

Paradigma cliente-servidor Proceso servidor Proceso cliente Inicia canal Inicia canal petición Abrir conexión escucha escritura Petición Aceptación Creación proceso hijo lectura lectura Respuesta escritura Cierre cierre 17

Paradigma cliente-servidor cliente servidor Protocolo de servicio: Localización del servicio. Comunicación entre procesos. Sin conexión Orientados a conexión Sincronización de eventos. Representación de datos. Petición 1 Respuesta 1 Petición 2 Respuesta 2 Petición n Respuesta n 18

Paradigma cliente-servidor Gestión de la sesión por parte del servidor: petición Servidor iterativo Cliente servidor respuesta Servidor concurrente: Procesos pesados Procesos ligeros IPC asíncronas Cliente petición respuesta servidor Proceso hijo Crea proceso 19

Paradigma cliente-servidor Servidor concurrente Servidor secuencial Servidor cliente 1 mensaje cliente 2 Servidor cliente 1 mensaje cliente 2 echo echo mensaje mensaje echo mensaje echo mensaje echo echo mensaje mensaje echo echo mensaje mensaje echo echo 20

Paradigma cliente-servidor Arquitectura del software: Presentación Lógica de aplicación Servicio (almacenamiento) cliente servidor cliente servidor Petición 1 Respuesta 1 Petición 2 Respuesta 2 Petición 1 Respuesta 1 Petición 2 Respuesta 2 Petición n Respuesta n Petición n Respuesta n 21

Tipos de servicios Sin estado Con estado Ej.: daytime, echo, etc. Con estado global Ej.: counter Con estado de sesión Ej.: ftp Servidor híbrido: información del estado se distribuye entre el servidor y el cliente. 22

Contenidos 1. Introducción: 1. Paradigma cliente/servidor 2. Entorno de programación Java 2. Cliente/servidor en Java 1. Introducción 2. Ejemplo con sockets 23

Ejemplo (streams) Máquina A cliente sumar(5,2) Máquina B servidor 5+2 7 RED 24

Client.java (1/2) Máquina A cliente sumar(5,2) resultado = 7 Máquina B servidor 5+2 RED import java.io.* ; import java.net.* ; public class Client { public static void main ( String [] args) { int res; int num[] = new int[2]; if (args.length!= 1) { System.out.println("Uso: cliente <host>"); System.exit(0); } try { String host = args[0]; Socket sc = new Socket(host, 2500); // socket servidor OutputStream ostream = sc.getoutputstream(); ObjectOutput s = new ObjectOutputStream(ostream); 25

Client.java (2/2) Máquina A cliente sumar(5,2) resultado = 7 Máquina B servidor 5+2 RED num[0] = 5; num[1] = 2; //prepara la petición s.writeobject(num); s.flush(); DataInputStream istream = new DataInputStream(sc.getInputStream()); res = istream.readint(); sc.close(); System.out.println("La suma es " + res); } } } catch (Exception e) { System.err.println("excepcion " + e.tostring() ); e.printstacktrace() ; } 26

Máquina A cliente sumar(5,2) Máquina B servidor Server.java (1/2) resultado = 7 5+2 RED import java.io.* ; import java.net.* ; public class Server { public static void main ( String [] args) { ServerSocket serveraddr = null; Socket sc = null; int num[] ; int res; try { serveraddr = new ServerSocket(2500); } catch (Exception e){ System.err.println("Error creando socket"); } 27

Máquina A cliente sumar(5,2) Máquina B servidor Server.java (2/2) resultado = 7 5+2 while (true) { try { sc = serveraddr.accept(); // esperando conexión InputStream istream = sc.getinputstream(); ObjectInput in = new ObjectInputStream(istream); num = (int[]) in.readobject(); res = num[0] + num[1]; Thread.sleep(2000); DataOutputStream ostream = new DataOutputStream(sc.getOutputStream()); ostream.writeint(res); ostream.flush(); sc.close(); } catch(exception e) { System.err.println( "excepcion " + e.tostring() ); e.printstacktrace() ; } // try } // while } // main } // servidor RED 28

Compilación del ejemplo guernika.lab.inf.uc3m.es Máquina A cliente sumar(5,2) resultado = 7 Máquina B servidor 5+2 RED # javac -cp /usr/lib/jvm/java-1.4.2-gcj-4.1-1.4.2.0/jre/lib/rt.jar \ -g Client.java Server.java 29

Ejecución del ejemplo guernika.lab.inf.uc3m.es # java Server & # java Client Uso: cliente <host> # java Client localhost La suma es 7 30

Ejemplo 2 (streams) cliente Máquina A cliente sumar(5,2) Máquina B servidor 5+2 7 RED 31

Máquina A cliente sumar(5,2) Máquina B servidor Server2.java (1/3) resultado = 7 5+2 RED import java.io.* ; import java.net.* ; import java.lang.thread ; class clienthandler implements Runnable { private Socket socket ; Thread t ; public clienthandler ( Socket socket ) { this.socket = socket ; this.t = new Thread(this) ; t.start() ; } 32

Máquina A cliente sumar(5,2) Máquina B servidor Server2.java (2/3) resultado = 7 5+2 RED public void run () { int num[] ; int res; try { InputStream istream = socket.getinputstream(); ObjectInput in = new ObjectInputStream(istream); num = (int[]) in.readobject(); res = num[0] + num[1]; Thread.sleep(2000); DataOutputStream ostream = new DataOutputStream(socket.getOutputStream()); ostream.writeint(res); ostream.flush(); socket.close(); } catch (Exception e) { System.err.println("Error al operar con el cliente"); } } // run } // clienthandler 33

Máquina A cliente sumar(5,2) Máquina B servidor Server2.java (3/3) resultado = 7 5+2 RED public class Server2 { public static void main ( String [] args) { ServerSocket serveraddr = null; Socket sc = null; try { serveraddr = new ServerSocket(2500); while (true) { sc = serveraddr.accept(); // esperando conexión new clienthandler(sc) ; } } catch (Exception e) { System.err.println("excepcion " + e.tostring() ); e.printstacktrace() ; } } // main } // servidor 34

clients.sh #!/bin/sh set -x I=0 while [ $I -lt 10 ]; do java Client localhost & I=`expr $I + 1` done # chmod a+x clients.sh 35

Ejecución del ejemplo guernika.lab.inf.uc3m.es # : servidor NO concurrente # java Server & #./clients.sh # : servidor SI concurrente # java kill -9 %1 # java Server2 & #./clients.sh 36

Cliente/Servidor en Java Grupo ARCOS Desarrollo de Aplicaciones Distribuidas Ingeniería Informática Universidad Carlos III de Madrid