Documentos de Académico
Documentos de Profesional
Documentos de Cultura
L3-Cliente Servidor en Java-V1b
L3-Cliente Servidor en Java-V1b
Grupo ARCOS
Desarrollo de Aplicaciones Distribuidas
Ingeniera Informtica
Universidad Carlos III de Madrid
Contenidos
Introduccin:
1.
1.
2.
Cliente/servidor en Java
2.
1.
2.
Paradigma cliente/servidor
Entorno de programacin Java
Introduccin
Ejemplo con sockets
ARCOS @ UC3M
Contenidos
Introduccin:
1.
1.
2.
Cliente/servidor en Java
2.
1.
2.
Paradigma cliente/servidor
Entorno de programacin Java
Introduccin
Ejemplo con sockets
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
Paradigma cliente-servidor
Asigna roles diferentes a dos procesos que colaboran:
...
Cliente 1
Cliente 2
Peticin de servicio
Proceso cliente
Proceso servidor
Servicio
ARCOS @ UC3M
Paradigma cliente-servidor
Paradigma peer-to-peer
Solicitud
Respuesta
Proceso 1
Respuesta
Proceso 2
ARCOS @ UC3M
ARCOS @ UC3M
Receptores
Emisores
Sistema de mensajes
...
...
ARCOS @ UC3M
10
2.
Ejemplos de servicio:
11
MQ*Series de IBM
Microsofts Message Queue (MSMQ)
Javas Message Service (JMS)
ARCOS @ UC3M
Contenidos
Introduccin:
1.
1.
2.
Cliente/servidor en Java
2.
1.
2.
12
Paradigma cliente/servidor
Entorno de programacin Java
Introduccin
Ejemplo con sockets
ARCOS @ UC3M
Java: caractersticas
13
Presentacin
Interfaz con el usuario
Lgica de negocio
Programa que responde a las peticiones del usuario
Lgica de acceso a datos
Interfaz con el almacenamiento de datos
(ej.: base de datos)
ARCOS @ UC3M
Java: caractersticas
14
ARCOS @ UC3M
Contenidos
Introduccin:
1.
1.
2.
Cliente/servidor en Java
2.
1.
2.
15
Paradigma cliente/servidor
Entorno de programacin Java
Introduccin
Ejemplo con sockets
ARCOS @ UC3M
Paradigma cliente-servidor
Los procesos desempean dos roles asimtricos.
Representa el paradigma de sistemas distribuidos
con una mayor difusin.
Acceso (por parte de los clientes) de servicios de red.
Flujo de ejecucin del servidor:
1.
2.
3.
4.
16
Inicio servicio.
Espera hasta aceptar peticin de un cliente.
Inicia sesin de servicio con el cliente.
Vuelta al paso 2.
ARCOS @ UC3M
Paradigma cliente-servidor
Proceso servidor
Inicia canal
Proceso cliente
Inicia canal
Abrir conexin
peticin
escucha
Aceptacin
Peticin
escritura
lectura
Cierre
17
Creacin
proceso
hijo
lectura
Respuesta
escritura
cierre
ARCOS @ UC3M
Paradigma cliente-servidor
cliente
servidor
Peticin 1
Protocolo de servicio:
Sin conexin
Orientados a conexin
Respuesta 1
Peticin 2
Respuesta 2
Sincronizacin de eventos.
Representacin de datos.
Peticin n
Respuesta n
18
ARCOS @ UC3M
Paradigma cliente-servidor
Servidor iterativo
servidor
Cliente
respuesta
19
Servidor concurrente:
Procesos pesados
Procesos ligeros
IPC asncronas
peticin
servidor
Cliente
Crea
proceso
respuesta
Proceso
hijo
ARCOS @ UC3M
Paradigma cliente-servidor
Servidor concurrente
Servidor
mensaje
20
cliente 1
cliente 2
Servidor secuencial
Servidor
cliente 1
cliente 2
mensaje
echo
echo
mensaje
mensaje
echo
echo
mensaje
mensaje
echo
echo
mensaje
mensaje
echo
echo
mensaje
mensaje
echo
echo
ARCOS @ UC3M
Paradigma cliente-servidor
servidor
cliente
cliente
Peticin 1
Respuesta 1
Peticin 2
Respuesta 2
Peticin n
Respuesta n
21
Presentacin
Lgica de aplicacin
Servicio (almacenamiento)
servidor
Peticin 1
Respuesta 1
Peticin 2
Respuesta 2
Peticin n
Respuesta n
ARCOS @ UC3M
Tipos de servicios
Sin estado
Ej.: daytime, echo, etc.
Con estado
Con estado global
Ej.: counter
Con estado de sesin
Ej.: ftp
Servidor hbrido:
informacin del estado se distribuye entre
el servidor y el cliente.
22
ARCOS @ UC3M
Contenidos
Introduccin:
1.
1.
2.
Cliente/servidor en Java
2.
1.
2.
23
Paradigma cliente/servidor
Entorno de programacin Java
Introduccin
Ejemplo con sockets
ARCOS @ UC3M
Ejemplo (streams)
Mquina A
cliente
Mquina B
sumar(5,2)
servidor
5+2
NCLEO
NCLEO
RED
24
ARCOS @ UC3M
Mquina A
cliente
Client.java (1/2)
sumar(5,2)
Mquina B
servidor
5+2
NCLEO
resultado = 7
NCLEO
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
ARCOS @ UC3M
Mquina A
cliente
Client.java (2/2)
sumar(5,2)
Mquina B
servidor
5+2
NCLEO
resultado = 7
NCLEO
RED
num[0] = 5;
num[1] = 2;
s.writeObject(num);
s.flush();
//prepara la peticin
26
ARCOS @ UC3M
Mquina A
cliente
Server.java (1/2)
sumar(5,2)
Mquina B
servidor
5+2
NCLEO
resultado = 7
NCLEO
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
ARCOS @ UC3M
Mquina A
cliente
Server.java (2/2)
sumar(5,2)
Mquina B
servidor
5+2
NCLEO
resultado = 7
NCLEO
RED
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]; 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
28
ARCOS @ UC3M
Mquina A
cliente
Mquina B
sumar(5,2)
servidor
5+2
NCLEO
resultado = 7
NCLEO
RED
29
ARCOS @ UC3M
30
ARCOS @ UC3M
Ejemplo 2 (streams)
Mquina A
cliente
cliente
Mquina B
sumar(5,2)
servidor
5+2
NCLEO
NCLEO
NCLEO
RED
31
ARCOS @ UC3M
Mquina A
cliente
Server2.java (1/3)
sumar(5,2)
Mquina B
servidor
5+2
NCLEO
resultado = 7
NCLEO
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
ARCOS @ UC3M
Mquina A
cliente
Server2.java (2/3)
sumar(5,2)
Mquina B
servidor
5+2
NCLEO
resultado = 7
NCLEO
RED
ARCOS @ UC3M
Mquina A
cliente
Server2.java (3/3)
sumar(5,2)
Mquina B
servidor
5+2
NCLEO
resultado = 7
NCLEO
RED
34
ARCOS @ UC3M
clients.sh
#!/bin/sh
set -x
I=0
while [ $I -lt 10 ]; do
java Client localhost &
I=`expr $I + 1`
done
35
ARCOS @ UC3M
# : servidor NO concurrente
# java Server &
# ./clients.sh
# : servidor SI concurrente
# java kill -9 %1
# java Server2 &
# ./clients.sh
36
ARCOS @ UC3M
Cliente/Servidor en Java
Grupo ARCOS
Desarrollo de Aplicaciones Distribuidas
Ingeniera Informtica
Universidad Carlos III de Madrid