Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
Receive
5/31
Envío asíncrono
Send
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
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
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
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
$ javac *.java
Verificar que los
nombres y la
Ejecutar el servidor extensión de los
archivos coincidan.
Incluyendo las
$ java GritonUDPServer mayúsculas y
minúsculas.
Ejecutar el cliente (en otra consola)
$ java GritonUDPClient
24/31
Implementación Java de sockets UDP
1010010011101011
“Hola mamá estoy triunfando
en programación“
25/31
Implementación Java de sockets UDP
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
30/31
Actividad