Dam M09 T03 PDF
Dam M09 T03 PDF
¿Qué aprenderás? P
A F
• Crear aplicaciones cliente servidor.
K I
• N
LI
Los protocolos de la pila TCP/IP.
• Utilizar la API.NET de Java.
• Programar aplicaciones multiusuario de comunicación.
N O
U M
¿Sabías que…? AL
L E
• El cloud computing es unaIB de las formas de computación
I M
distribuida más utilizadas en la actualidad. Dropbox, Spotify o
PR
Google Docs son ejemplos.
• Dropbox, Spotify o Google Docs son ejemplos de cloud
computing.I M
•
N de forma única dentro de una red.
Una dirección IP es un código numérico que identifica a una
I Ó
máquina
R S
VE
1
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
L E
IB
I M
P R
IM
N
I Ó
R S
V E
Un sistema distribuido es un conjunto de equipos independientes que actúan de
forma transparente actuando como un único equipo
2
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
como lógicos. L E
todos los elementes que intervienen en el sistema de comunicación tanto si son físicos
I B
I M
P R
IM
N
I Ó
R S
V E
3
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
F P
IA
El cliente es el que inicia las solicitudes o peticiones. Tiene, por tanto, un papel
N K
activo en la comunicación. Espera y recibe las respuestas del servidor. Puede conectarse a
varios servidores a la vez. Normalmente, interactúa directamente con los usuarios finales
mediante una interfaz gráfica de usuario.
LI
N O
U M
AL
L E
El servidor al iniciarse, espera a que le lleguen las solicitudes de los clientes.
IB
Desempeña entonces, un papel pasivo en la comunicación. Siempre está a la espera de que
llegue alguna petición. Tras la recepción de una solicitud, la procesa y luego envía la
I M
respuesta al cliente. Por lo general, acepta conexiones desde un gran número de clientes
P R
(en ciertos casos el número máximo de peticiones puede estar limitado)
Como ventajas de este sistema podemos destacar:
• IM
Centralización del control: El acceso, los recursos y los datos son controlados por el
N
servidor impidiendo accesos no autorizados al sistema.
•
I Ó
Escalabilidad: Se pueden aumentar la cantidad de clientes y servidores por separado.
R
•
S
Cualquier elemento puede ser mejorado en cualquier momento.
Fácil mantenimiento: Al estar distribuidas las funciones entre varios elementos es
V E posible reemplazar, actualizar o trasladar un servidor, sin que los clientes se afecten o
se afectaran mínimamente.
• La existencia de tecnologías lo suficientemente desarrolladas que aseguran que el
entorno sea fácil de usar, amigable y seguro en las transacciones de información.
Como inconvenientes del modelo cliente servidor tenemos:
• La congestión del tráfico ha sido siempre el principal problema, esto se produce
cuando una gran cantidad de clientes envían peticiones a un mismo servidor.
4
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
• Cuando un servidor está caído las peticiones de los clientes no pueden ser satisfechas,
esto no pasa en otros modelos como por ejemplo en las redes P2P donde los
elementos desempeñan al mismo tiempo el rol de cliente y de servidor.
• El hardware y el software del cliente y del servidor son muy determinantes en el
sistema.
F P
Cuando se produce un intercambio de información entre equipos utilizando una red
I A
es preciso definir una serie de mecanismos que le hagan posible. Por esto motivo la
K
International Standard Organization (ISO) especificó un modelo para describir las redes de
N
LI
comunicación y las partes en que se divide.
El estándar define siete capas, de tal modo que cada una se fundamenta en la
comunicación. N O
anterior, aunque no es necesario utilizar todas ellas para construir nuestro sistema de
M
Cada capa permite que pueda ser modificada internamente sin afectar al resto.
U
AL
Dentro de cada la comunicación se lleva a cabo siguiendo unas reglas y convenciones
predefinidas llamadas comúnmente protocolos. Se conoce como especificación del servicio
al interfaz que permite la comunicación entre las capas adyacentes.
L E
En los sistemas distribuidos, esta organización que contiene todos los elementos
pila de protocolos. I B
hardware y software necesarios para la comunicación se conoce con el nombre de pila IP o
I M
P R
IM
N
I Ó
R S
V E
El protocolo IP es el protocolo estándar de comunicaciones en internet y en la
mayoría de sistemas distribuidos y define una pila de protocolos con las siguientes capas:
red, internet, transporte y aplicación.
• La capa de red está formada por la capa física y la capa de enlace del modelo OSI.. La
capa más baja del sistema de comunicación es la capa física en la que se definen los
elementos físicos como los cables o las tarjetas de red. La capa de enlace incluye los
protocolos de transmisión, de acceso, de recepción de las señales y los controladores
de las tarjetas de red.
5
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
•
la ruta que deben seguir los paquetes para llegar al receptor.
N O
La capa de enlace añade nuevos datos para conseguir que esta información llegue al
• U M
nodo próximo situado en el camino activando todos los elementos físicos necesarios.
AL
Las señales saltaran de nodo en nodo hasta llegar al dispositivo receptor, comprobando
su dirección IP. Esta información subirá a la capa de transporte que verificará que la
información recibida es correcta, y solo en este caso subirá los datos a la capa de
L E
aplicación que las recibirá y actuará en consecuencia.
IB
I M
P R
IM
N
I Ó
R S
V E
6
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
• UDP: No está basado en la conexión como TCP. Envía paquetes de datos independientes,
F P
denominados datagramas, de una aplicación a otra; el orden de entrega no es importante
y no se garantiza la recepción de los paquetes enviados. El tamaño máximo del mensaje I A
que se puede enviar es de 64KB.
N K
LI
3.6. API Java.net
N O
U M
Proporciona las clases para la implementación de aplicaciones de red. Las podemos
dividir en dos secciones.
AL
• L E
Una API de bajo nivel, que se ocupa de las abstracciones siguientes:
Las direcciones: Son los identificadores de red, como por ejemplo las
•
direcciones IP.
I B
• I M
Sockets: Son los mecanismos básicos de comunicación bidireccional de datos.
Interfaces: Describen las interfaces de red.
P R
Una API de alto nivel, que se ocupa de las abstracciones siguientes:
•
• IM
URI: Representan identificadores de recursos universales.
URLs: Representan los localizadores de recursos universales.
• N
Conexiones: Representa las conexiones al recurso apuntado por URL.
I Ó
R S
3.6.1. Clase InetAddress
VE
Es la abstracción que representa una dirección IP (Internet Protocol). Tiene dos
subclases: Inet4Address para direcciones IPv4 (32 bits) y Inet6Address para direcciones
IPv6 (128 bits), pero en la mayoría de casos no es necesario recurrir a ellas.
La clase InetAddress nos sirve para representar una dirección IP, las instancias de
esta clase no se crean llamando a un constructor, de hecho no tiene constructores, si no
que llamando a los siguientes métodos, los cuales devuelven un objeto de tipo
InetAddress.
7
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
F
Los tres métodos anteriores arrojan la excepción UnknowHostException, en caso de P
IA
que el nombre o la dirección de la máquina no se encuentren o no existan en Internet,
deberemos controlar esa excepción al utilizar estos métodos.
N K
LI
En el siguiente ejemplo se muestran las direcciones IP de diversos nombres de
dominio.
N O
U M
AL
L E
IB
I M
P R
3.6.2. Clase URL
IM
N
I Ó
Representa un puntero a un recurso de la Web. Un recurso, puede ser un fichero,
un directorio, una consulta a una base de datos o una búsqueda en internet.
V E
8
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
Algunos métodos:
• getPort():Devuelve el número de puerto de la URL, -1 si no se indica.
• getHost(): Devuelve el nombre de la máquina.
• getQuery(): Devuelve la cadena que se envía a una página para ser procesada (lo que
sigue al signo ?).
• getPath(): Devuelve una cadena con la ruta hacia el fichero desde el servidor y el
nombre completo del fichero.
• getFile(): Devuelve la concatenación de getPath() y getQuery().
•
•
getUserInfo(): Devuelve la parte con los datos del usuario de la dirección URL.
InputStream openStream(): Abre una conexión al objeto URL y devuelve un
F P
InputStream para la lectura de esa conexión.
I A
• URLConnection openConnection(): Devuelve un objeto URLConnection que representa
N K
LI
la conexión a un objeto remoto referenciado por la URL.
O
En el siguiente ejemplo vemos el uso de los constructores definidos.
N
U M
AL
L E
I B
I M
P R
IM
N
I Ó
R S
VE
9
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
Es una clase abstracta que contiene métodos que permiten la comunicación entre
aplicaciones y una URL. Para conseguir un objeto de este tipo se invoca al método
openConnection(), con ello obtenemos una conexión al objeto URL referenciado.
Las instancias de esta clase se pueden utilizar tanto para leer como para escribir al
recurso referenciado por la URL. Puede lanzar la excepción IOException.
Algunos métodos:
• InputStream getInputStream():Devuelve un objeto InputStream para leer datos de
esta conexión.
F P
• OutputStream getOutputStream():Devuelve un objeto OutputStream para escribir
IA
•
datos en esta conexión.
N K
LI
setDoInput(boolean b): Permite que el usuario reciba datos de la URL si el parámetro b
es true (por defecto)
•
• connect(): Abre una conexión al recurso remoto.
N O
setDoOutput(boolean b): Permite que el usuario envíe datos si el parámetro b es true.
•
•
U M
getContentLength(): Devuelve el valor del campo de cabecera content-length.
getContentType(): Devuelve el valor del campo de cabecera content-type.
AL
• getDate():Devuelve el valor del campo de cabecera date.
• getLastModified():Devuelve el valor del campo de cabecera last-modified.
• getURL(): Devuelve la dirección URL.
L E
IB
En el siguiente ejemplo, a partir de la dirección https://www.google.com/gmail/, se
I M
crea un objeto URL, se invoca al método openConnection para crear una conexión y se
obtiene un URLConnection. Después se abre un stream de entrada sobre esa conexión
P R
mediante el método getInputStream. Y obtenemos el código fuente de la página web.
IM
N
I Ó
R S
V E
10
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
F P
I A
N K
LI
3.7. Sockets N O
U M
AL
La documentación oficial de java define los sockets como el punto final de la
L E
comunicación bidireccional entre dos programas que se ejecutan en la red.
Nos proporciona una abstracción de la pila de protocolos, estarían situados en la
I B
capa de transporte y representan un punto de acceso a las capas inferiores del sistema.
I M
Para establecer una comunicación entre dos aplicaciones, éstas deben crear sus
P R
respectivos sockets y conectarlos entre sí. Una vez conectados, se crea un canal privado a
través de la red que permite a las aplicaciones enviar y recibir mensajes en los extremos.
IM
N
I Ó
R S
V E
Los sockets se asocian a una dirección IP y a un puerto de forma que sea posible
enviar información a través de la red utilizando alguno de los protocolos de transporte TCP
o UDP.
Si utilizamos el protocolo UDP hablaremos de sockets no orientados a la conexión y
utilizaremos el protocolo TCP cuando los sockets sean orientados a la conexión.
11
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
U
Los métodos más importantes de la clase ServerSocket son:M
•
AL
ServerSocket(host, puerto): Sirve para crear sockets stream de Servidor, constructor
básico de la clase. Se le pueden pasar como argumentos la IP y el puerto que deseamos
•
asignar al servidor.
L E
• IB
bind(socketadress): Asigna una ip y un puerto determinado al socket.
accept(): Escucha y acepta conexiones socket de clientes. Devuelve un objeto de la
I M
clase Socket conectado al cliente.
• close(): cierra el socket.
P R
La clase Socket se utiliza para crear y trabajar con sockets stream de clientes. Los
IM
métodos más importantes son:
•
N
Socket(): Sirve para crear sockets stream de cliente, constructor básico de la clase.
•
•
Ó
connect(addr): Establece la conexión con el servidor en una ip y puerto determinado.
I
R S
getInputStream(): Se utiliza para las operaciones de lectura obteniendo un objeto de la
clase InputStream.
12
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
Cuando el cliente solicita una conexión, el servidor abrirá la conexión al socket con
el método accept().
El cliente establece una conexión con la máquina host a través del puerto
especificado mediante el método Socket(host, port).
F P
I A
N K
LI
N O
U M
AL
El cliente y el servidor se comunican con utilizando los objetos InputStream y
OutputStream. El cliente escribe los mensajes en el OutputStream asociado al socket y el
L E
servidor leerá los mensajes del cliente de InputStream. Igualmente el servidor escribirá los
mensajes al OutputStream y el cliente los leerá del InputStream. Finalmente cerraran la
conexión.
I B
I M
En el siguiente ejemplo vemos cómo actúan estas clases. El cliente se conecta al
servidor y va enviando mensajes hasta que escribe la palabra FIN. Los mensajes se
visualizan en el servidor.
P R
IM
N
I Ó
R S
VE
13
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
F P
IA
N K
LI
N O
U M
Ejecución del ejemplo: AL
L E
IB
I M
P R
I M
N
3.7.2. Sockets no orientados a la conexión: UDP
I Ó
R S Los sockets no orientados a conexión utilizan el protocolo UDP para enviar
mensajes, llamados datagramas, sobre canales temporales. Sus principales características
VE
son:
• Utilizan el protocolo de transporte UDP.
• No existe diferencia entre proceso cliente y proceso servidor.
• No son fiables y no garantizan el orden de llegada correcto de los mensajes.
• Son más simples y eficientes que los TCP pero no está garantizada la entrega de los
paquetes.
14
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
F P
En los sockets UDP no se establece conexión, por tanto podemos considerar que el
I
servidor es el que espera un mensaje y responde; y el cliente el que inicia la comunicación.A
N K
LI
Ambos dispositivos si desean comunicarse necesitan saber en qué ip y puerto está
escuchando el otro. El proceso a seguir es el siguiente:
N O
U M
AL
L E
I B
I M
P R
IM
• N
El servidor crea un socket asociado a un puerto local para escuchar peticiones de
I Ó
clientes. Permanece a la espera de recibir peticiones.
R• S
El cliente creará un socket para comunicarse con el servidor. Para enviar datagramas
VE necesita conocer su IP y el puerto por el que escucha. Utilizará el método send() del
socket para enviar la petición en forma de datagrama.
• El servidor recibe las peticiones mediante el método receive() del socket. En el
datagrama va incluido además del mensaje, el puerto y la IP del cliente emisor de la
petición; lo que le permite al servidor conocer la dirección del emisor del datagrama.
Utilizando el método send() del socket puede enviar la respuesta al cliente emisor.
• El cliente recibe la respuesta del servidor mediante el método receive() del socket.
• El servidor permanece a la espera de recibir más peticiones.
15
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
F P
IA
N K
LI
N O
U M
AL
L E
IB
I M
P R
IM
N
I Ó
R S
V E
16
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
F P
I A
N K
LI
N O
U M
AL
L E
I B
I M
R
3.7.4. La clase MulticastSocket
P
IM
La clase MulticastSocket es útil para enviar paquetes a múltiples destinos
simultáneamente. Para poder recibir estos paquetes es necesario establecer un grupo
N
multicast, que es un grupo de direcciones IP que comparten el mismo número de puerto.
I Ó
Cuando se envía un mensaje a un grupo de multicast, todos los que pertenezcan a
R S
ese grupo recibirán el mensaje. La pertenencia al grupo es transparente al emisor, es decir,
el emisor no conoce el número de miembros del grupo ni sus direcciones IP.
17
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
Recursos y enlaces
• Api Java.net
F P
IA
N K
Conceptos clave LI
• La pila de protocolos TCP/IP se divide en 4 capas.
N O
•
•
Los sockets son canales de comunicación entre aplicaciones.
Los sockets stream están orientados a conexión.
U M
AL
• Los sockets datagram no están orientados a conexión.
L E
IB
I M
P R
IM
N
I Ó
R S
V E
18
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
Test de autoevaluación
P R
Ponlo en práctica IM
N
I Ó
R S
Actividad 1
VE Realiza una aplicación cliente servidor utilizando sockets stream con la siguiente
funcionalidad. El cliente envía mensajes al servidor hasta que tecleemos la palabra FIN. El
servidor recibe el mensaje y lo escribe al revés por la pantalla. La palabra FIN no se procesa
y finaliza la ejecución.
19
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
SOLUCIONARIOS
Test de autoevaluación
N K
El protocolo UDP permite enviar mensajes de longitud: LI
i) Variable de hasta 64 KB.
j) Fija de 4KB. N O
k) Fija de 64 KB.
U M
AL
l) Variable sin límite.
P R
o) Crear clientes en servicios TCP/IP.
p) Crear clientes en servicios UDP/IP.
IM
N
I Ó
Ponlo en práctica
R S
E
V Actividad 1
Realiza una aplicación cliente servidor utilizando sockets stream con la siguiente
funcionalidad. El cliente envía mensajes al servidor hasta que tecleemos la palabra FIN. El
servidor recibe el mensaje y lo escribe al revés por la pantalla. La palabra FIN no se procesa
y finaliza la ejecución.
20
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
Solución Actividad 1
Clase Servidor.
F P
I A
N K
LI
N O
U M
AL
L E
I B
I M
P R
IM
N
I Ó
R S
V E
21
Desarrollo de Aplicaciones Multiplataforma. Programación de servicios y procesos
Tema 3. Programación de comunicaciones en red
Clase Cliente
F P
IA
N K
LI
N O
U M
AL
L E
IB
I M
P R
IM
N
I Ó
R S
V E
22