Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Paso de Mensajes en Java
Paso de Mensajes en Java
Grupo ARCOS
Desarrollo de Aplicaciones Distribuidas
Ingeniera Informtica
Universidad Carlos III de Madrid
Contenidos
Introduccin:
1.
1.
2.
2.
Introduccin a sockets
Sockets en Java
1.
2.
1.
2.
3.
Datagrama
Orientado a conexin
Difusin (comunicacin en grupo)
ARCOS @ UC3M
Contenidos
Introduccin:
1.
1.
2.
2.
Introduccin a sockets
Sockets en Java
1.
2.
1.
2.
3.
Datagrama
Orientado a conexin
Difusin (comunicacin en grupo)
ARCOS @ UC3M
alto
Espacio de objetos, aplicaciones colaborativas
Servicios de red, object request broker, agentes mviles
procedimientos remotos, mtodos remotos
Cliente-servidor, peer-to-peer
Paso de mensajes
bajo
ARCOS @ UC3M
Proceso A
Proceso B
m1
m2
Mensaje
m3
Paso de mensajes
ARCOS @ UC3M
ARCOS @ UC3M
Contenidos
Introduccin:
1.
1.
2.
2.
Introduccin a sockets
Sockets en Java
1.
2.
1.
2.
3.
Datagrama
Orientado a conexin
Difusin (comunicacin en grupo)
ARCOS @ UC3M
Java: programacin
Programacin en Java.
Independiente de la plataforma
compilador
Programa
Java
Cdigo
mquina nativo
JVM
Cdigo
bytecode
Aplicaciones.
Applets.
Servlets.
ARCOS @ UC3M
Aplicacin
Objeto Java
JVM
Applet
Objeto Java
applet
JVM
Servlet
servlet
Solicitud
Proceso
Respuesta
ARCOS @ UC3M
Java: caractersticas
10
Recolector de basura
ARCOS @ UC3M
Java: caractersticas
11
ARCOS @ UC3M
Empaquetamiento de datos
Transformaciones necesarias para poder transmitir
datos o estructuras entre distintos ordenadores
Prueba"
1.2
7.3
-1.5
marshalling
unmarshalling
Prueba"
-1.5
7.3
1.2
Computador B
12
ARCOS @ UC3M
13
ARCOS @ UC3M
Contenidos
Introduccin:
1.
1.
2.
2.
Introduccin a sockets
Sockets en Java
1.
2.
1.
2.
3.
14
Datagrama
Orientado a conexin
Difusin (comunicacin en grupo)
ARCOS @ UC3M
Sockets: introduccin
Abstraccin que:
15
Protocolo TCP
Protocolo UDP
Otros
ARCOS @ UC3M
Sockets: introduccin
POSIX 1003.1g
Actualmente:
16
Tipos de sockets
Sockets STREAM
Concepto de flujo de datos.
Asociado al protocolo TCP.
17
ARCOS @ UC3M
Proceso 2
Proceso 1
Obtener
streams
Socket()
Peticin
sendto()
receivefrom()
Respuesta
18
receivefrom()
sendto()
close()
close()
ARCOS @ UC3M
socket
socket
listen
Conexin
connect
accept
Peticin
read
write
Respuesta
19
read
write
close
close
ARCOS @ UC3M
Contenidos
Introduccin:
1.
1.
2.
2.
Introduccin a sockets
Sockets en Java
1.
2.
1.
2.
3.
20
Datagrama
Orientado a conexin
Difusin (comunicacin en grupo)
ARCOS @ UC3M
Sockets de Java
21
DatagramSocket
DatagramPacket
ServerSocket
Socket
ARCOS @ UC3M
Sockets datagrama
DatagramPacket:
DatagramSocket:
22
Sockets datagrama
Referencia a objeto
Flujo de datos
Proceso emisor
Proceso receptor
Vector de bytes
Vector de bytes
Direccin del
receptor
Objeto DatagramPacket
Objeto DatagramPacket
send
receive
Objeto DatagramSocket
23
Objeto DatagramSocket
ARCOS @ UC3M
Sockets datagrama
24
ARCOS @ UC3M
Ejemplo (datagramas)
Mquina A
cliente
Mquina B
sumar(5,2)
servidor
5+2
NCLEO
Restulado
= 7= 7
resultado
NCLEO
RED
25
ARCOS @ UC3M
Emisor (datagramas)
import
import
import
import
java.lang.* ;
java.io.* ;
java.net.* ;
java.util.* ;
26
ARCOS @ UC3M
Emisor (datagramas)
try
{
// se crea el socket del cliente
s = new DatagramSocket();
// direcin del servidor
server_addr = InetAddress.getByName(args[0]);
num[0] = 2;
num[1] = 5;
// empaquetar los datos.
ByteArrayOutputStream baos = new ByteArrayOutputStream() ;
ObjectOutputStream
dos.writeObject(num);
bsend = baos.toByteArray() ; // se obtiene el buffer (datagrama)
// un nico envio
out = new DatagramPacket(bsend, bsend.length, server_addr, 2500);
s.send(out);
27
ARCOS @ UC3M
Emisor (datagramas)
// se recibe el datagrama de respuesta
in = new DatagramPacket(brecv, 100);
s.receive(in);
// se obtiene el buffer
brecv = in.getData();
// 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
ARCOS @ UC3M
Receptor (datagramas)
import
import
import
import
java.lang.* ;
java.io.* ;
java.net.* ;
java.util.* ;
29
ARCOS @ UC3M
Receptor (datagramas)
while (true)
{
30
ARCOS @ UC3M
Receptor (datagramas)
ByteArrayOutputStream baos =
new ByteArrayOutputStream();
DataOutputStream dos =
new DataOutputStream(baos);
dos.writeInt(res);
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
ARCOS @ UC3M
Contenidos
Introduccin:
1.
1.
2.
2.
Introduccin a sockets
Sockets en Java
1.
2.
1.
2.
3.
32
Datagrama
Orientado a conexin
Difusin (comunicacin en grupo)
ARCOS @ UC3M
Sockets stream
InputStream getInputStream()
Void setSoTimeout(int tiempo_de_espera)
33
flush,
Socket accept()
Void close()
Void setSoTimeout(int tiempo_de_espera)
ARCOS @ UC3M
34
ServerSocket(puerto);
socket(host, puerto)
accept();
OutputStream
InputStream
InputStream
OutputStream
close()
close()
ARCOS @ UC3M
Proceso emisor
Socket()
Abrir conexin
Obtener
streams
Accept()
Accept()
Crear
Thread
Obtener
streams
Peticin
write()
read()
Respuesta
35
read()
write()
close()
close()
ARCOS @ UC3M
Ejemplo (streams)
Mquina A
cliente
Mquina B
sumar(5,2)
servidor
5+2
NCLEO
Restulado
= 7= 7
resultado
NCLEO
RED
36
ARCOS @ UC3M
Emisor (streams)
import
import
import
import
java.lang.* ;
java.io.* ;
java.net.* ;
java.util.* ;
37
ARCOS @ UC3M
Emisor(streams)
OutputStream ostream = sc.getOutputStream();
ObjectOutput s = new ObjectOutputStream(ostream);
num[0] = 5;
num[1] = 2;
//prepara la peticin
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() ;
}
}
}
38
ARCOS @ UC3M
Receptor (streams)
import
import
import
import
java.lang.* ;
java.io.* ;
java.net.* ;
java.util.* ;
39
ARCOS @ UC3M
Receptor (streams)
while (true) {
try {
sc = serverAddr.accept(); // esperando conexin
InputStream istream = sc.getInputStream();
ObjectInput in = new ObjectInputStream(istream);
num = (int[]) in.readObject();
res = num[0] + num[1];
DataOutputStream ostream = new DataOutputStream(sc.getOutputStream());
ostream.writeInt(res);
ostream.flush();
sc.close();
} catch(Exception e) {
System.err.println("excepcion " + e.toString() );
e.printStackTrace() ;
}
} // while
} // main
} // servidor
40
ARCOS @ UC3M
Contenidos
Introduccin:
1.
1.
2.
2.
Introduccin a sockets
Sockets en Java
1.
2.
1.
2.
3.
41
Datagrama
Orientado a conexin
Difusin (comunicacin en grupo)
ARCOS @ UC3M
Comunicacin en grupo
Demanda:
Aplicaciones.
Aumento de la robustez del sistema.
emisor
receptor
IPC uno-a-uno
IPC grupo o multidifusin
42
ARCOS @ UC3M
Comunicacin en grupo
Operaciones primitivas:
Incorporacin
Abandono
Envo
Recepcin
Multidifusin:
43
Multidifusin de datos.
ARCOS @ UC3M
No fiable
Fiable
Sin orden
FIFO
Orden atmico
44
Orden casual
ARCOS @ UC3M
Sin orden
Se emiten m1, m2, m3
m1-m2-m3, m1-m3-m2, m2-m1-m3, m2-m3-m1, m3-m1-m2, m3-m2-m1
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
ARCOS @ UC3M
Orden atmico:
Ejemplo 1:
P1 enva m1, P2 enva m2, y P3 enva m3.
m1-m2- m3,
m2-m3-m1,
m2- m1-m3,
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,
46
Multidifusin en Java
Direccin IP de multidifusin:
47
ARCOS @ UC3M
48
ARCOS @ UC3M
Multidifusin en Java
InetAddress.getByName("239.1.2.3");
MulticastSocket s = new
s.joinGroup(group);
MulticastSocket(3456);
// opcional
DatagramPacket hi = new
DatagramPacket(msg.getBytes(),
msg.length(),group, 3456);
s.send(hi);
49
ARCOS @ UC3M
Multidifusin en Java
50
ARCOS @ UC3M
Multidifusin en Java
Tiempo de vida
51
ARCOS @ UC3M
Multidifusin en Java
Valores del tiempo de vida:
0 <= tiempo_de_vida <= 255
52
0
1
32
64
128
255
misma mquina
misma red local
misma zona
misma regin
mismo continente
no est restringida
ARCOS @ UC3M
Multidifusin en Java
53
ARCOS @ UC3M