Comunicaciones y Sistemas
Departamento de Informtica
Universidad Carlos III de Madrid
Julio de 2012
1. Introduccin:
1. Paradigma de paso de mensajes
2. Entorno de programacin Java
2
Contenidos
1. Introduccin:
1. Paradigma de paso de mensajes
2. Entorno de programacin Java
3
Paradigma de paso de mensajes
alto
bajo
4
Paradigma de paso de mensajes
} Paradigma fundamental para aplicaciones distribuidas
} Un proceso enva un mensaje de solicitud
} El mensaje llega al receptor, el cual procesa la solicitud y
devuelve un mensaje en respuesta
} Esta respuesta puede originar posteriores solicitudes por parte del emisor
Proceso A Proceso B
m1
m2
Mensaje
m3
Paso de mensajes
5
Paradigma de paso de mensajes
6
Contenidos
1. Introduccin:
1. Paradigma de paso de mensajes
2. Entorno de programacin Java
7
Java: programacin
} Programacin en Java.
Independiente de la plataforma
compilador JVM
Programa Cdigo Cdigo
Java bytecode mquina nativo
8
Java: tipos de programas
Computador
Aplicacin
Objeto Java
JVM
Applet
JVM
Servlet
Respuesta
9
Java: caractersticas
10
Java: caractersticas
11
Empaquetamiento de datos
} Transformaciones necesarias para poder transmitir datos o
estructuras entre distintos ordenadores
Prueba" 1.2 7.3 -1.5
1. Aplanado de los campos de la estructura de datos
Computador A marshalling
2. Conversin a la representacin externa (de red)
110011 ... 10000100 ...
Computador B
12
Java: comunicacin de datos y objetos
} Java soporta la serializacin de objetos.
} Empaquetamiento y transmisin de objetos
entre procesos.
theFile
=
new
File(args[0]);
outStream
=
new
FileOutputStream(theFile);
objStream
=
new
ObjectOutputStream(outStream);
...
objStream.writeInt(3);
objStream.writeObject(new
Crouton(7));
objStream.writeObject(new
Tomato("Mars",
11,
5))
...
int
primitive
=
objStream.readInt();
crunch
=
(Crouton)
objStream.readObject();
Object
tomato
=
objStream.readObject();
13
Contenidos
1. Introduccin:
1. Paradigma de paso de mensajes
2. Entorno de programacin Java
14
Sockets: introduccin
} Aparecieron en 1981 en UNIX BSD 4.2
} Intento de incluir TCP/IP en UNIX
} Diseo independiente del protocolo de comunicacin
} Abstraccin que:
} Se representa un extremo de una comunicacin bidireccional
con una direccin asociada
} En el caso de sockets basados en TCP/UDP se tiene
una direccin IP y un puerto
} Ofrece interfaz de acceso a los servicios de red en el nivel de
transporte
} Protocolo TCP
} Protocolo UDP
} Otros
15
Sockets: introduccin
} Sujetos a proceso de estandarizacin dentro de POSIX
} POSIX 1003.1g
} Actualmente:
16
Tipos de sockets
} Datagrama sin conexin
} Sin conexin.
} No fiable, no se asegura el orden en la entrega.
} Mantiene la separacin entre mensajes.
} Asociado al protocolo UDP.
} Sockets STREAM
} Concepto de flujo de datos.
} Asociado al protocolo TCP.
17
Uso de sockets datagram
Proceso 1 Proceso 2
Obtener
Socket() streams
Peticin
sendto() receivefrom()
Respuesta
receivefrom() sendto()
close() close()
18
Uso de sockets stream
Proceso 2
Proceso 1 socket
socket
listen
Conexin
connect accept
Peticin
write read
Respuesta
read write
close close
19
Contenidos
1. Introduccin:
1. Paradigma de paso de mensajes
2. Entorno de programacin Java
20
Sockets de Java
21
Sockets datagrama
} DatagramPacket:
} implementa un objeto que permite enviar o recibir paquetes.
} Constructor: DatagramPacket.
} Mtodos: getAddres, getPort, ...
} DatagramSocket:
} implementa un socket que se puede utilizar para
enviar o recibir datagramas.
} Constructor: DatagramSocket.
} Mtodos: send, receive, close, setSoTimetout, getSoTimeout,...
22
Sockets datagrama
Referencia a objeto
Flujo de datos
Direccin del
receptor
send
receive
Objeto DatagramSocket Objeto DatagramSocket
23
Sockets datagrama
24
Ejemplo (datagramas)
Mquina A Mquina B
sumar(5,2)
cliente servidor
5+2
NCLEO Restulado
resultado= =7 7 NCLEO
RED
25
Emisor (datagramas)
import java.lang.* ;
import java.io.* ;
import java.net.* ;
import java.util.* ;
if (args.length != 1) {
System.out.println("Uso: cliente <host>");
System.exit(0);
}
26
Emisor (datagramas) // Excerpt from the sending process
InetAddress receiverHost =
try
{ InetAddress.getByName (" localHost ");
DatagramSocket theSocket = new DatagramSocket ( );
// se crea el socket del cliente
String message = "Hello world!";
s = new DatagramSocket(); byte[ ] data = message.getBytes ( );
27
Emisor (datagramas) //Excerpt from a receiver program
DatagramSocket ds = new DatagramSocket(2345);
// se recibe el datagrama de respuesta DatagramPacket dp =
new DatagramPacket(buffer, MAXLEN );
in = new DatagramPacket(brecv, 100);
ds.receive(dp );
s.receive(in); len = dp .getLength ( );
System.out.Println (len + " bytes received.\n");
// se obtiene el buffer String s = new String( dp .getData ( ), 0, len);
System.out.println (dp .getAddress ( ) + " at port "
brecv = in.getData(); + dp .getPort ( ) + " says " + s);
// se desempaqueta
ByteArrayInputStream bais = new ByteArrayInputStream(brecv) ;
DataInputStream dis = new DataInputStream(bais);
res = dis.readInt();
System.out.println("Datos recibidos " + res);
}
catch (Exception e) {
System.err.println("<<<<<excepcion " + e.toString() );
e.printStackTrace() ;
}
}
}
28
Receptor (datagramas)
import java.lang.* ;
import java.io.* ;
import java.net.* ;
import java.util.* ;
29
Receptor (datagramas) //Excerpt from a receiver program
DatagramSocket ds = new DatagramSocket(2345);
DatagramPacket dp =
new DatagramPacket(buffer, MAXLEN );
while (true) ds.receive(dp );
{ len = dp .getLength ( );
System.out.Println (len + " bytes received.\n");
s.receive(in); //esperamos a recibir String s = new String( dp .getData ( ), 0, len);
System.out.println (dp .getAddress ( ) + " at port "
+ dp .getPort ( ) + " says " + s);
brecv = in.getData(); // obtener datos
client_addr = in.getAddress();
client_port = in.getPort();
30
Receptor (datagramas) // Excerpt from the sending process
InetAddress receiverHost =
InetAddress.getByName (" localHost ");
DatagramSocket theSocket = new DatagramSocket ( );
ByteArrayOutputStream baos =
String message = "Hello world!";
new ByteArrayOutputStream();
byte[ ] data = message.getBytes ( );
DataOutputStream dos =
new DataOutputStream(baos); DatagramPacket thePacket
dos.writeInt(res); = new DatagramPacket ( data , data.length ,
receiverHost , 2345);
theSocket .send ( thePacket );
bsend = baos.toByteArray();
out = new DatagramPacket(bsend, bsend.length, client_addr, client_port);
s.send(out);
}
}
catch(Exception e) {
System.err.println("excepcion " + e.toString() );
e.printStackTrace() ;
}
}
}
31
Contenidos
1. Introduccin:
1. Paradigma de paso de mensajes
2. Entorno de programacin Java
32
Sockets stream
} La clase socket implementa un socket stream
} Socket(InetAddress direccin, int puerto)
} OutputStream getOutputStream()
} flush,
} InputStream getInputStream()
} Void setSoTimeout(int tiempo_de_espera)
33
Esqueleto con sockets streams de Java
Receptor
Emisor ServerSocket(puerto);
OutputStream InputStream
InputStream OutputStream
close() close()
34
Esqueleto con sockets streams de Java
Proceso receptor
ServerSocket()
Proceso emisor
Peticin
write() read()
Respuesta
read() write()
close() close()
35
Ejemplo (streams)
Mquina A Mquina B
sumar(5,2)
cliente servidor
5+2
NCLEO Restulado
resultado= =
7 7 NCLEO
RED
36
Emisor (streams)
import java.lang.* ;
import java.io.* ;
import java.net.* ;
import java.util.* ;
if (args.length != 1) {
System.out.println("Uso: cliente <host>");
System.exit(0);
}
try { // se crea la conexin
String host = args[0];
Socket sc = new Socket(host, 2500); // conexin
37
Emisor(streams)
OutputStream ostream = sc.getOutputStream();
ObjectOutput s = new ObjectOutputStream(ostream);
s.writeObject(num);
s.flush();
sc.close();
System.out.println("La suma es " + res);
}
catch (Exception e){
System.err.println("excepcion " + e.toString() );
e.printStackTrace() ;
}
}
}
38
Receptor (streams)
import java.lang.* ;
import java.io.* ;
import java.net.* ;
import java.util.* ;
39
Receptor (streams)
while (true) {
try {
sc = serverAddr.accept(); // esperando conexin
InputStream istream = sc.getInputStream();
ObjectInput in = new ObjectInputStream(istream);
40
Contenidos
1. Introduccin:
1. Paradigma de paso de mensajes
2. Entorno de programacin Java
41
Comunicacin en grupo
} IPC en grupo o multidifusin.
} Demanda:
} Aplicaciones.
} Aumento de la robustez del sistema.
emisor receptor
IPC uno-a-uno
IPC grupo o multidifusin
42
Comunicacin en grupo
} Operaciones primitivas:
} Incorporacin
} Abandono
} Envo
} Recepcin
} Multidifusin:
} Sin conexin: baja latencia.
} Audio/vdeo en tiempo real.
43
Tipos de sistemas de multidifusin
} No fiable
} Fiable
} Sin orden
} Los mensajes no tienen orden entre procesos, y los de un mismo proceso
} FIFO
} Se mantiene el orden de los mensajes de un mismo proceso
(distintos entrelazados)
} Orden casual
} Relacin sucede-antes/casual entre todos los mensajes
} Orden atmico
} Relacin sucede-antes/casual entre ciertos mensajes
44
Ejemplos de los distintos
tipos de sistemas de multidifusin
} Sin orden
Se emiten m1, m2, m3
} FIFO
A emite A1-A2 y B emite B1-B2
A1-A2-B1-B2,
A1-B1-A2-B2,
A1-B1-B2-A2,
B1-A1-A2-B2
B1-A1-B2-A2
B1-B2-A1-A2.
} Orden casual
A emite A1, B emite B1, A emite -A2 y B emite B2
A1-A2-B1-B2,
45
Ejemplos de los distintos
tipos de sistemas de multidifusin
} Orden atmico:
Ejemplo 1:
P1 enva m1, P2 enva m2, y P3 enva m3.
m1-m2- m3, m1- m3- m2, m2- m1-m3,
m2-m3-m1, m3-m1- m2, m3-m2-m1.
Ejemplo 2:
P1 enva m1 y luego m2.
P2 responde a m1 enviando m3.
P3 responde a m3 enviando m4
Orden a respetar: m1 - m3 - m4
m1- m2- m3- m4, m1- m3- m2- m4, m1- m3- m4- m2.
46
Multidifusin en Java
} Extensin del protocolo UDP.
} Multidifusin no fiable.
} Ofrece clases prximas a las APIs de sockets:
} InetAddress: identifica grupo de multidifusin.
} DatagramPacket: paquete de datos enviado a todos los participantes y
paquete de datos recibido por cada participante.
} MulticastSocket: permite gestionar sockets multidifusin.
} Direccin IP de multidifusin:
} Direcciones de multidifusin del protocolo de internet.
} Direccin IP de clase D: 224.0.0.0 a 239.255.255.255.
} Nmero de puerto UDP.
47
Direcciones de multidifusin asignadas
48
Multidifusin en Java
49
Multidifusin en Java
50
Multidifusin en Java
} Tiempo de vida
} Objetivo: evitar que los mensajes circulen indefinidamente.
} Nmero de enlaces a travs de los que se retransmite el paquete.
51
Multidifusin en Java
} 0 misma mquina
} 1 misma red local
} 32 misma zona
} 64 misma regin
} 128 mismo continente
} 255 no est restringida
52
Multidifusin en Java
53