sockets udp - Educacion Esencial

Anuncio
Comunicación entre procesos: sockets udp
Jorge Iván Meza Martínez
[email protected]
Especialización en Gestión de Redes de Datos
Universidad Nacional de Colombia – Sede Manizales
1/31
Contenidos
●
Conceptos generales de sockets
●
Tipos de envío y recepción
–
Síncronos
–
Asíncronos
2/31
Evaluación pre-contenido
1. Qué es un socket ?
2. Qué tipos de socket existen ?
3. Qué información requiere un socket cliente para
realizar su conexión con el servidor ?
4. Cuáles son las primitivas principales de los
sockets ?
5. Qué significa que estas primitivas sean síncronas o
asíncronas ?
3/31
Soporte a sockets
4/31
Envío síncrono
Send
(dirección IP, puerto)
(cualquier puerto)
Buffer
Msg Buffer
La comunicación está sincronizada.
● Las primitivas son bloqueantes.
●
Emisor
Receptor
Receive
5/31
Envío asíncrono
Send
(dirección IP, puerto)
(cualquier puerto)
Msg Buffer
Emisor
La comunicación no está
sincronizada.
● El envío es no bloqueante.
● La recepción puede ser bloqueante
o no bloqueante.
●
Buffer
Receptor
Receive
6/31
Sockets
●
●
●
●
Proveen comunicación entre procesos que pueden
estar en la misma o diferentes máquinas.
Creado inicialmente para BSD Unix.
16
Se asocian a una dirección IP y un puerto (2 )
específicos (cliente / servidor).
Es responsabilidad del desarrollador la
representación del mensaje.
●
A través del mismo socket se puede leer y escribir.
●
Están asociados a TCP o UDP.
7/31
Esquema general de la conexión
8/31
Primitivas de los Sockets
●
Conectarse a un servidor remoto
●
Enviar información
●
Recibir información
●
Cerrar una conexión
●
Asociarse a un puerto
●
Escuchar por información entrante
●
Aceptar conexiones remotas por el puerto asociado
9/31
Evaluación post-contenido
1. Qué es un socket ?
2. Qué tipos de socket existen ?
3. Qué información requiere un socket cliente para
realizar su conexión con el servidor ?
4. Cuáles son las primitivas principales de los
sockets ?
5. Qué significa que estas primitivas sean síncronas o
asíncronas ?
10/31
Sockets con User Datagram Protocol (UDP)
11/31
Contenidos
●
Conceptos generales de los sockets UDP.
●
Ventajas y desventajas de los sockets UDP.
●
Usos mas frecuentes para los sockets UDP.
●
●
Flujo de eventos durante una comunicación
utilizando sockets UDP.
Implementación de una conexión con sockets UDP
en Java.
12/31
Evaluación pre-contenido
1. Cuáles es la característica principal de los sockets
UDP ?
2. Cuáles son las ventajas y desventajas de utilizar
sockets UDP ?
3. Para qué tipo de aplicaciones o servicios es idóneo
el uso de sockets UDP y para cuales no ?
13/31
Características de los sockets UDP
●
RFC 768.
●
Son no orientados a conexión.
●
●
●
●
No se garantiza la presencia del destino ni la
existencia de una ruta.
Los mensajes son enviados en paquetes o
datagramas.
Distintos datagramas de un mismo mensaje pueden
utilizar distintos caminos para llegar a su destino.
Por este motivo pueden llegar en desórden (unos
tardan mas que otros) o inclusive, no llegar.
14/31
Datagramas UDP
15/31
Tamaño del Datagrama
●
●
●
Tamaño máximo: 64KB incluyendo el mensaje
(payload) y diversas cabeceras (headers).
Mejor tamaño ?
–
rlogin → pequeño (1 letra).
–
tftp → grandes
Criterios
–
Red poco confiable → pequeños
–
Red confiable → grandes
–
En general 8KB es una buena opción.
16/31
Sockets UDP
Rápidos pero no fiables.
Analogía: el modelo del correo postal.
17/31
Modelo de fallos de UDP
●
No incluye mensaje de reconocimiento
(acknowledge) o reintentos en caso de problemas →
menor sobrecarga (tamaño).
●
Los paquetes pueden no llegar en su totalidad.
●
Los paquetes pueden llegar desordenados.
●
Incluye una suma de verificación (checksum).
●
Los paquetes pueden ser desechados en ciertas
condiciones: exceso de tráfico, buffer lleno, etc.
18/31
Usos de sockets UDP
●
Útil en servicios que puedan tolerar pérdidas
ocasionales:
–
DNS (búsqueda)
–
DHCP
–
BOOTP
–
SNMP
–
VoIP
–
Audio y video streaming
19/31
Sockets UDP
20/31
Implementación Java de sockets UDP
●
●
●
●
●
DatagramSocket → socket UDP que envía y recibe
datagramas.
DatagramPacket - mensaje a ser enviado a través de
una conexión UDP.
InetAddress – dirección IP (v4 o v6)
SocketException - error sucedido creando o
accediendo a un socket.
IOException - Error genérico de E/S.
21/31
Servidor UDP Java (general)
DatagramSocket aSocket = new DatagramSocket(8989);
byte[] buffer = new byte[1000];
DatagramPacket request = new DatagramPacket(buffer, buffer.length);
aSocket.receive(request);
DatagramPacket reply = new DatagramPacket (data.getBytes(), data.getBytes().length, request.getAddress(), request.getPort());
aSocket.send(reply);
22/31
Cliente UDP Java (general)
DatagramSocket aSocket = new DatagramSocket();
byte[] m = new String("Mensaje").getBytes();
InetAddress aHost = InetAddress.getByName("127.0.0.1");
int serverPort = 8989;
DatagramPacket request = new DatagramPacket(m, m.length, aHost, serverPort);
aSocket.send(request);
byte[] buffer = new byte[1000];
DatagramPacket reply = new DatagramPacket(buffer, buffer.length);
aSocket.receive(reply);
23/31
Como ejecutar el ejemplo: GritonUDP
Compilar las clases (manualmente o utilzar Netbeans)
$ javac *.java
Ejecutar el servidor
$ java GritonUDPServer
Verificar que los
nombres y la
extensión de los
archivos coincidan.
Incluyendo las
mayúsculas y
minúsculas.
Ejecutar el cliente (en otra consola)
$ java GritonUDPClient
24/31
Implementación Java de sockets UDP
200 OK true 625
1010010011101011
“Hola mamá estoy triunfando
en programación“
25/31
Implementación Java de sockets UDP
●
●
ByteArrayInputStream → flujo de datos construído
a partir de un buffer interno.
DataInputStream → permite leer tipos primitivos de
datos desde un flujo.
26/31
Cliente UDP Java (payload no es String)
// ...
DatagramPacket request = new DatagramPacket(m, m.length, aHost, serverPort);
aSocket.send(request);
DatagramPacket reply = new DatagramPacket(buffer, buffer.length);
aSocket.receive(reply);
InputStream in = new ByteArrayInputStream(reply.getData(),
reply.getOffset(), reply.getLength());
DataInputStream din = new DataInputStream(in); // readBoolean(), readByte(), readChar(), readFloat(), ...
27/31
Ejemplo: escaner de puertos UDP local
import java.net.*;
public class UDPPortScanner {
public static void main(String[] args) {
for (int port = 1024; port <= 65535; port++) {
try {
DatagramSocket server = new DatagramSocket(port);
server.close( );
} catch (SocketException ex) {
System.out.println("There is a server on port " + port + ".");
} // end try
} // end for
}
}
28/31
29/31
Evaluación pre-contenido
1. Cuáles es la característica principal de los sockets
UDP ?
2. Cuáles son las ventajas y desventajas de utilizar
sockets UDP ?
3. Para qué tipo de aplicaciones o servicios es idóneo
el uso de sockets UDP y para cuales no ?
30/31
Actividad
Desarrollar una aplicación Java basada en datagramas con
sockets que implemente una calculadora cliente-servidor.
Desde el cliente se le enviarán solicitudes de operaciones como
“4 + 9 – 5“ a través de la línea de comando y el servidor
enviará de vuelta al cliente el resultado: “8“. Para esto
considere las operaciones aritméticas básicas (+, -, *, /) y no
tenga en cuenta la precedencia de los operadores.
Investigar como evitar en Java que un receive en el cliente
no bloquee infinitamente la aplicación cuando no reciba una
respuesta del servidor en un tiempo prudencial.
31/31
Descargar