Comunicaciones - PowerPoint PPT Presentation

1 / 25
About This Presentation
Title:

Comunicaciones

Description:

Dos enfoques a la hora de explotar la funcionalidad asociada a los hilos: Basado en tareas. En este enfoque la raz n principal de utilizar un hilo es invocar ... – PowerPoint PPT presentation

Number of Views:31
Avg rating:3.0/5.0
Slides: 26
Provided by: clo130
Category:

less

Transcript and Presenter's Notes

Title: Comunicaciones


1
Comunicaciones
  • Tabla de Contenido
  • Introducción
  • Relación con Threads
  • Sockets
  • Ejemplo Servidor ECO
  • Ejemplo Cadena de Ordenes

2
Introducción
  • Dos enfoques a la hora de explotar la
    funcionalidad asociada a los hilos
  • Basado en tareas
  • En este enfoque la razón principal de utilizar un
    hilo es invocar asincrónicamente a un método que
    realiza una determinada tarea.
  • La tarea puede abarcar desde un único método
    hasta una sesión completa.
  • 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.
  • Basado en actores
  • La razón principal para de utilizar un hilo
    consiste en crear y poner en marcha un nuevo
    objeto autónomo, activo, similar a un proceso.
  • Este objeto puede reaccionar frente a eventos
    externos, interactuar con otros actores.
  • Los diseños basados en actores se encuentran en
    sistemas de control, reactivos y distribuidos.

3
Introducción
  • Ejemplo de diseño de un servicio Web
  • El Servicio Web
  • Es un hilo del tipo actor que hace las veces de
    un proceso sin interfaz
  • Interacciona continuamente con su entorno a la
    espera de nuevas solicitudes entrantes.
  • Para atender las distintas peticiones se sigue un
    enfoque basado en tareas, poniendo en marcha una
    nueva tarea para responder a cada una de las
    solicitudes entrantes.
  • El cliente Web
  • Es un hilo del tipo actor que pide solicita
    servicios a al servidor Web.
  • Existen diferentes estilos para comunicar
    unidireccionalmente ambos objetos activos.
  • Cadenas de ordenes el receptor deberá analizar y
    procesar la tarea asociada, suelen basarse en
    comunicaciones con sockets

4
Introducción
  • Objetos de eventos el mensaje contiene la
    descripción estructurada de un evento. El
    receptor lanza alguna tarea asociada a un evento.
    Se utilizan en entornos GUI.
  • Objetos de solicitud el mensaje contiene la
    codificación del nombre de un método y algunos
    argumentos . El receptor produce la llamada
    correspondiente a un método, destinada a un
    objeto auxiliar que ejecutará ese método. Se
    utilizan en sistemas de soporte para objetos
    distribuidos tales como los que se encuentran en
    java.rmi y org.omg.corba.
  • Objetos de clase El mensaje es una representación
    de una clase, de la cual crea una instancia el
    receptor. Este esquema se utiliza en el entorno
    java.applet.
  • Objetos ejecutables El mensaje consta de un
    cierto código que ejecuta el receptor.
  • Objetos arbitrarios El emisor puede tratar a
    cualquier clase de objeto como un mensaje
    mediante la inclusión de ese objeto como
    argumento de un método o pasándole a través de un
    canal

5
Introducción
Una forma de mantener la comunicación Sockets
Servicio
Atributos y conexiones
for ( ) aceptar una petición crear una
tarea
mensaje
Acepta Mensajes
6
Introducción
Objetos de eventos
7
Introducción
8
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.

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

10
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 ().
  • Hay que establecer un protocolo de comunicación
    entre el cliente y el servidor para poder
    interpretar esos mensajes.

11
Sockets
  • Esquema de un sistema basado en comunicación con
    Sockets

12
Sockets
  • Código para abrir un socket cliente sobre un
    servidor
  • Socket miCliente
  • try
  • miCliente new Socket ("servidor",
    numeroPuerto)
  • catch (IOException e)
    System.out.println (e)

13
Sockets
  • Código para abrir un socket servidor donde puedan
    conectarse los clientes
  • ServerSocket miServicio
  • try
  • miServicio new ServerSocket (numeroPuerto)
  • catch (IOException e)
  • System.out.println (e)
  • Socket socketServicio null
  • try
  • socketServicio miServicio.accept ()
  • catch (IOException e)
  • System.out.println (e)

14
Sockets
  • Código para crear un stream de entrada sobre un
    Socket previamente abierto
  • Socket s
  • BufferedReader sIn
  • ...
  • try
  • sInnew BufferedReader (new InputStreamReader(s.g
    etInputStream()))
  • ...
  • catch( IOException e )
  • finally sIn.close()

15
Sockets
  • Codigo para crear un stream de salida sobre un
    Socket previamente abierto
  • Socket s
  • PrintWriter sOut
  • ...
  • try
  • sOut new PrintWriter(s.getOutputStream(),true)
  • ...
  • catch( IOException e )
  • finally sOut.close()

16
Ejemplo Servidor ECO ( Carpeta ECO)
import java.net. class ServidorEco public
static void main( String args )
ServerSocket s null Socket cliente
null // Establecemos el servicio en el puerto
9999 // No se puede elegir un puerto por debajo
del 1023 si no somos usuarios privilegiados
try s new ServerSocket( 9999 )
catch( IOException e )
System.out.println( e )
17
Ejemplo Servidor ECO
// Creamos el objeto desde el cual
atenderemos y aceptaremos // las conexiones
de los clientes y abrimos los canales de //
comunicación de entrada y salida while
(true) try cliente
s.accept() new GestorPeticion(cliente).
start() catch( IOException e )
System.out.println( e )
//main //Class ServidorECO
18
Ejemplo Servidor ECO
class GestorPeticion extends Thread Socket
s public GestorPeticion (Socket s )
this.s s public void run()
BufferedReader sIn PrintWriter sOut
try // Apertura de Streams asociados al
Socket sIn new BufferedReader (new
InputStreamReader(s.getInputStream()))
sOut new PrintWriter(s.getOutputStream(),true)

19
Ejemplo Servidor ECO
// Recepción de datos por el Stream de
entrada String texto sIn.readLine()
// Replico datos sOut.println(
"Respuesta del servidor de ECO " texto )
// Cierre de Stream y socket
sIn.close() sOut.close()
s.close() catch( IOException e )
System.out.println( e )
20
Ejemplo Servidor ECO
  • Como ejecutar el servidor
  • Compilar y ejecutar la clase ServidorEco. Cuando
    se este ejecutando el servidor existe un nuevo
    servicio en la máquina a la escucha en el puerto
    9999.
  • Se necesita un cliente que solicite servicio. Se
    puede utilizar un cliente telnet para probar el
    servidor.
  • Telnet IP numero_port
  • telnet localhost 9999
  • Introducir una cadena y el servidor replicará la
    cadena y cerrará la sesión.

21
Ejemplo Cliente ECO
class ClienteEco public static void main(
String args ) Socket miCliente
BufferedReader entrada PrintWriter salida
try miCliente new
Socket ("localhost", 9999) entrada new
BufferedReader (new InputStreamReader(m
iCliente.getInputStream())) salida new
PrintWriter(miCliente.getOutputStream(),true)
salida.println("Hola") // Envío datos
System.out.println(entrada.readLine())// Recibo
el eco
entrada.close() salida.close()
catch( IOException e )
System.out.println( e )
22
Ejemplo Cadena de Ordenes (Carpeta ECO2)
  • En el ejemplo anterior se han visto los aspectos
    puramente técnicos y la arquitectura para
    trabajar con servicios WEB.
  • Una forma de mantener la comunicación entre el
    cliente y el servidor es interpretar los datos
    que llegan a través de los Stream.
  • El conjunto de ordenes utilizadas en la
    comunicación se denomina protocolo.
  • En el siguiente ejemplo se va a mantener la
    conexión hasta que el cliente introduce la cadena
    ( orden ) bye.
  • Cuando el servidor recibe BYE envía un mensaje
    de fin de conexión
  • Se muestran las modificaciones en la clase
    GestorPeticion, en su método run().

23
Ejemplo Cadena de Ordenes
boolean fin false try sIn
new BufferedReader (new InputStreamReader(s.getInp
utStream())) sOut new
PrintWriter(s.getOutputStream(),true)
sOut.println( "")
sOut.println( "Bienvenido al servidor
de ECO ") sOut.println( "Escribe BYE
para terminar ") sOut.println(
"") while
(!fin) String texto sIn.readLine()
// Comprobar que no es la cadena BYE
if (texto.regionMatches(true,0,"BYE",0,3))
sOut.println( "Abandono la conexion del
servidor de ECO") fin true
else sOut.println( texto)
//While sIn.close()
sOut.close() s.close()
24
Ejemplo Cadena de Ordenes
  • En la carpeta ECO3, se encuentra el desarrollo de
    un applet que implementa un cliente que se
    comunica con el Servidor de ECO.
  • Al igual que el servidor el cliente también añade
    su propio bucle de escucha del Stream hasta que
    envía el comando BYE.

//pleaseStop es una variable booleana que se
activa cuando el cliente escribe bye while
(!pleaseStop) try
String lineentrada.readLine()
//Procesamiento de la entrada
ta.append(line "\n")
catch (IOException e) /
While /
25
Bibliografía
  • Judy M.Bishop, Java Fundamentos de Programación
    BIS98
  • Capítulo 14,Trabajo en Red.
Write a Comment
User Comments (0)
About PowerShow.com