Vous êtes sur la page 1sur 31

Interprocess Communication

UCEVA
Facultad de ingeniería
Ingeniería de sistemas
Sistemas Distribuidos
Ingeniera Vivian Orejuela Ruiz
Capas de Middleware

Applic ations, services

RMI and RPC

reques t-reply protocol Middlew are


This lay ers
c hapter
marshalling and ex ternal data representation

UDP and TCP

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
Características de la comunicación de procesos

p q

Implica

Emisor Receptor
Comunicación
Sincronización
Secuencia de bytes
Envia Recibe

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
Comunicación síncrona y asíncrona

Colas de mensajes
p q

Emisor Receptor

Envia() Cola de mensajes Recibe()

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
Comunicación síncrona y asíncrona

Síncrona:
Tanto envía como recibe son operaciones bloquéantes
Asíncrona:
La utilización de la operación envía no es bloqueante
La operación recibe puede tener variantes bloqueante y
no bloqueante
p q

Emisor Receptor

Mensaje
Envia() Recibe()
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
Destinos de los mensajes

En IP los mensajes son enviados a direcciones


construidas por pares

(dirección internet, puerto local)

Destino del mensaje Tiene un solo


dentro del receptor , pero puede
computador tener muchos
emisores

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
Sockets (conectores)

IP soporta comunicación entre computadores


TCP Y UDP soporta comunicación entre procesos

Socket
Se asocia a

Dirección de Internet Numero de puerto

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
Sockets and ports

Para recibir puede usar varios puertos


Un proceso NO puede compartir puertos con otro
proceso del mismo computador
Puerto
Cualquier acordado
socket puerto socket

mensaje
client server
Otros puertos
Internet address = 138.37.94.248 Internet address = 138.37.88.249

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
Comunicación de Datagramas UDP

UDP Puerto UDP origen Puerto UDP destino

Longitud mensaje Suma de verificación

Datos

No tiene acuse de recibo


Mensaje
Recibo IP emisor
Puerto emisor

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
Comunicación de Datagramas UDP

Tamaño de los mensajes


El receptor especifica una cadena de bytes de un
tamaño concreto.
IP, permite paquetes 216 bytes

Bloqueo
Operación de envió no bloquéante
Operación de recepción bloquéante
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
Comunicación de Datagramas UDP

Tiempo limite de espera


Con bloqueo indefinido para servidores
El tiempo limite debe ser un poco mayor al
tiempo requerido para la transmisión del mensaje.
Recibe información de cualquiera
La operación recibe no especifica el origen del
mensaje.

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
Comunicación de Datagramas UDP

Modelo de Fallo (UDP)


Fallos de omisión: se rechazan mensajes
Ordenamiento

Checksum Está lleno el buffer


Utilización de UDP
Ejemplo DNS
Por menor sobrecarga

Almacenamiento de Transmisión de Latencia


información de estado en el mensajes en el emisor para el emisor
origen y el destino
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
API java para UDP

DatagramPacket

DatagramSocket

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
API java para UDP

 DatagramPacket: las instancias DatagramPacket podrán ser


transmitidas entre procesos

Cadena de Longitud del Dirección de Numero de


bytes mensaje Internet puerto
conteniendo el
mensaje

Métodos
getData
getPort
Del emisor
getAddress
getLength
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
API java para UDP

 DatagramSocket: Maneja Sockets para enviar y recibir


Datagramas UDP
Recibe como argumento puerto
No recibe argumento
SocketException

 Metodos:
close()
finalize()
getLocalPort()Retorna el número de puerto en el host local
al que está conectado el socket.
receive (DatagramPacket p)
send (DatagramPacket p)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
CLIENTE UDP 1/3

import java.net.*;
import java.io.*;

public class UDPClient{


public static void main(String args[]){
DatagramSocket aSocket = null;

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
…CLIENTE UDP 2/3

try {
aSocket = new DatagramSocket();
byte [] m = "hola".getBytes();
InetAddress aHost = InetAddress.getByName("localhost");
int serverPort = 6789;
DatagramPacket request = new DatagramPacket(m,
"hola".length(), aHost, serverPort);
aSocket.send(request);
byte[] buffer = new byte[m.length];
DatagramPacket reply = new DatagramPacket(buffer,
buffer.length);
aSocket.receive(reply);
System.out.println("Reply: " + new
String(reply.getData()));
}//try Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
…CLIENTE UDP 3/3

catch (SocketException e){


System.out.println("Socket: " + e.getMessage());
}catch (IOException e){
System.out.println("IO: " + e.getMessage());
}//catch
finally {
if(aSocket != null) aSocket.close();
}//finally
} //main
}//UDPClient
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
UDP server 1/2

import java.net.*;
import java.io.*;
public class Userver {
public static void main(String[] args) {
DatagramSocket aSocket = null;
try{
aSocket = new DatagramSocket(6789);
byte[] buffer = new byte[1000];
while(true){
DatagramPacket request = new DatagramPacket(buffer, buffer.length);
aSocket.receive(request);
DatagramPacket reply = new DatagramPacket(request.getData(),
request.getLength(), request.getAddress(), request.getPort());
aSocket.send(reply);
}//while
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
…UDP server 2/2

}catch (SocketException e){


System.out.println("Socket: " + e.getMessage());
}catch (IOException e) {
System.out.println("IO: " + e.getMessage());} //catch
finally {if(aSocket != null) aSocket.close();}
}//main
}//Userver1

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
COMUNICACIÓN DE STREAMS TCP

Ofrecen una comunicación fiable y libre de errores,


garantizando que los mensajes llegarán ordenados,
sin duplicados y sin pérdidas. Antes de comenzar la
transmisión necesitan una fase previa de
establecimiento de la conexión.

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
COMUNICACIÓN DE STREAMS TCP

Tamaño de los mensajes


La aplicación elige la cantidad de datos que quiere escribir o
leer del stream
Mensajes perdidos
Acuse de recibo
Control del flujo
Duplicación y Ordenamiento de los mensajes
A cada IP se le asocia un identificador
Destinos de los mensajes
Connect
Accept
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
COMUNICACIÓN DE STREAMS TCP

Hilos
Un servidor puede bloquearse esperando respuesta.
Modelo de Fallo (TCP)
Los procesos que utilizan la conexión no distinguen entre
un fallo de red y un fallo en el proceso que esta en el otro
extremo
Los procesos comunicantes no pueden saber si sus
mensajes recientes han sido recibidos.
Utilización
HTTP, FTP, TELNET, SMTP

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
API java para los streams TCP

ServerSocket

Socket

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
API java para los streams TCP

ServerSocket
Utilizada por un servidor para crear un socket en el
puerto del servidor que escucha las peticiones de los
clientes.
Métodos
public Socket accept ()
public void close ()
public InetAddress getInetAddress ()
public int getLocalPort (): Retorna el puerto en el que está
escuchando el socket.
public String toString( )

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
API java para los streams TCP

Socket
Esta clase es utilizada por el par de procesos de una
conexión

Métodos
public void close()
public InetAddress getInetAddress ()
public InputStream getInputStream ()
public int getLocalPort(): Retorna el puerto local al que
está conectado el socket.
public OutputStream getOutputStream ()
public int getPort ()Retorna el puerto remoto al que está
conectado el socket.
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
TCP client 1/2

import java.net.*;
import java.io.*;
public class TCPClient {
public static void main (String args[]) {
Socket s = null;
try{
int serverPort = 7896;
s = new Socket("localhost", serverPort);
DataInputStream in = new DataInputStream( s.getInputStream());
DataOutputStream out =
new DataOutputStream( s.getOutputStream());
out.writeUTF("hola");
String data = in.readUTF();
System.out.println("Received: "+ data) ;
}//try

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
TCP client 2/2

trycatch (UnknownHostException e){


System.out.println("Sock:"+e.getMessage());
}catch (EOFException
e){System.out.println("EOF:"+e.getMessage());
}catch (IOException
e){System.out.println("IO:"+e.getMessage());}
finally {if(s!=null) try {s.close();}catch (IOException
e){System.out.println("close:"+e.getMessage());}}
}//main
}//TCPClient

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
TCP server 1/3

import java.net.*;
import java.io.*;

public class TCPServer {


public static void main (String args[]) {
try{
int serverPort = 7896;
ServerSocket listenSocket = new ServerSocket(serverPort);
while(true) {
Socket clientSocket = listenSocket.accept();
Connection c = new Connection(clientSocket);
}
} catch(IOException e) {System.out.println("Listen :"+e.getMessage());}
}
}
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
TCP server 2/3

class Connection extends Thread {


DataInputStream in;
DataOutputStream out;
Socket clientSocket;
public Connection (Socket aClientSocket) {
try {
clientSocket = aClientSocket;
in = new DataInputStream( clientSocket.getInputStream());
out =new DataOutputStream( clientSocket.getOutputStream());
this.start();
} catch(IOException e)
{System.out.println("Connection:"+e.getMessage());}
}

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000
TCP server 3/3

public void run(){


try {
String data = in.readUTF();
out.writeUTF(data);
} catch(EOFException e)
{System.out.println("EOF:"+e.getMessage());
} catch(IOException e)
{System.out.println("IO:"+e.getMessage());}
finally{ try {clientSocket.close();}catch (IOException
e){/*close failed*/}}
}
}

Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
© Addison-Wesley Publishers 2000

Vous aimerez peut-être aussi