Publicado el 5 de Julio del 2017
1.671 visualizaciones desde el 5 de Julio del 2017
338,4 KB
63 paginas
Creado hace 17a (15/10/2007)
Laboratorio de Redes de Comunicaciones
Programación con Sockets en Java
Sockets orientados a conexión
Sockets no orientados a conexión
UNIVERSIDADE DA CORUÑA
Java: Distribuido
UNIVERSIDADE DA CORUÑA
• Java se ha construido con extensas capacidades de
interconexión TCP/IP. Existen librerías de rutinas para
acceder e interactuar con protocolos como http y ftp. Esto
permite a los programadores acceder a la información a
través de la red con tanta facilidad como a los ficheros
locales.
• Java en sí no es distribuido, sino que proporciona las
librerías y herramientas para que los programas puedan ser
distribuidos, es decir, que se corran en varias máquinas,
interactuando.
Octubre 2007
Laboratorio de Redes de Comunicaciones
2
Java: Distribuido
UNIVERSIDADE DA CORUÑA
• Pensado para su aplicación en redes.
• Soporta varios niveles de conectividad en red:
- Permite abrir un URL
- RMI
- Permite trabajar con “sockets”
• Permite crear de forma sencilla, tanto aplicaciones cliente
como servidor.
Octubre 2007
Laboratorio de Redes de Comunicaciones
3
Clientes y servidores
UNIVERSIDADE DA CORUÑA
• Aplicaciones Cliente/Servidor
• Cliente:
– Programa que ejecuta el usuario
– Solicita un servicio a una máquina
• Servidor:
– Ofrece un servicio a múltiples clientes
• Ejemplos: telnet, ftp, web, echo
Octubre 2007
Laboratorio de Redes de Comunicaciones
4
Ejemplo: Servicio de telnet
UNIVERSIDADE DA CORUÑA
Ejecuta un telnet
Servidor de telnet: telnetd
Octubre 2007
Laboratorio de Redes de Comunicaciones
5
Conceptos básicos de redes
UNIVERSIDADE DA CORUÑA
• En Internet se utiliza la pila de
protocolos TCP/IP para el
establecimiento y realización de
conexiones, basado en un
conjunto de protocolos
organizados en diferentes
niveles: Enlace / Red /
Transporte / Aplicación.
• Normalmente, cuando se
escriben aplicaciones Java en
Red se programa a nivel de
aplicación.
• Es posible realizar programas a
más bajo nivel utilizando la API
java.net => nivel de transporte
=> TCP /UDP.
Capa de Aplicación
(HTTP, ftp, telnet)
Capa de Transporte
(TCP, UDP)
Capa de Red
(IP)
Capa de Enlace
(Ethernet, ...)
Octubre 2007
Laboratorio de Redes de Comunicaciones
6
Capa de Transporte: TCP vs UDP
UNIVERSIDADE DA CORUÑA
• TCP: Transmission Control Protocol
– Protocolo orientado a conexión
– Provee un flujo de bytes fiable entre dos ordenadores.
• Llegada en orden, correcta, sin perder nada.
– Protocolos del nivel de aplicación que usan TCP: telnet, http, ftp.
• UDP: User Datagram Protocol
– No orientado a conexión.
– Envía paquetes de datos (datagramas) independientes sin garantías.
– Protocolos del nivel de aplicación que usan UDP: tftp, ping.
– Permite broadcast.
Octubre 2007
Laboratorio de Redes de Comunicaciones
7
¿Qué es un puerto?
UNIVERSIDADE DA CORUÑA
• Un ordenador tiene una o varias conexiones físicas a la red.
• A través de esas conexiones recibe los datos dirigidos a la máquina.
•
¿Cómo determinar a que aplicación enviar los datos? Puertos.
– TCP y UDP utilizan los puertos para dirigir los datos a la aplicación
correcta de entre todas las que se estén ejecutando en la máquina.
• Los datos transmitidos a través de Internet contienen información de
direccionamiento que identifica a la máquina y puerto a los que van
dirigidos.
– La máquina se identifica a través de una dirección IP de 32 bits.
– Los puertos se identifican por un número de 16 bits.
• Puertos:
– Independientes para TCP y UDP.
– 16 bits Rango: 0 a 65535.
– Reservados: 0 a 1023 (“well known ports”)
• Para servicios conocidos: HTTP,FTP, …
• No deberían ser utilizados por aplicaciones de usuario.
Octubre 2007
Laboratorio de Redes de Comunicaciones
8
TCP
UNIVERSIDADE DA CORUÑA
• Una aplicación servidora se registra en un puerto concreto.
– El servidor se registra en el sistema para recibir los datos dirigidos
a ese puerto.
• El cliente se conecta con el servidor usando ese número de
puerto.
– Sólo en el establecimiento de la conexión se precisa la IP+puerto.
– El resto de paquetes TCP sólo llevan un identificador de la
conexión.
Servidor
Servidor
p
u
e
r
t
o
TCP
Cliente
Cliente
Octubre 2007
Laboratorio de Redes de Comunicaciones
9
UDP
UNIVERSIDADE DA CORUÑA
• Una aplicación servidora se registra en un puerto concreto.
– El servidor se registra en el sistema para recibir los datos dirigidos
a ese puerto.
• El cliente envía datagramas que contienen el número de
puerto del destino asociado a la aplicación servidora.
– UDP enruta hacia la aplicación adecuada.
– En cada paquete UDP va toda la información necesaria para que
enrute: IP+puerto
Aplicación
Aplicación
Aplicación
Aplicación
Aplicación
Aplicación
Puerto
Puerto
UDP
Puerto
Octubre 2007
Laboratorio de Redes de Comunicaciones
# Puerto
# Puerto
Datos
Datos
Paquete
10
Clases para Redes en JDK
UNIVERSIDADE DA CORUÑA
• Paquete java.net
– Clases Java para crear programas que utilicen TCP o UDP para
comunicarse sobre Internet.
– Clases URL, URLConnection, Socket, ServerSocket
• Utilizan TCP para comunicaciones de red.
– Clases DatagramPacket, DatagramSocket, MulticastSocket
• Utilizan UDP para comunicaciones de red.
• Niveles de comunicación de red
– Bajo nivel: Aplicaciones cliente/servidor basadas en protocolos.
– Alto nivel: Acceso a recursos de red
Octubre 2007
Laboratorio de Redes de Comunicaciones
11
¿Qué es un socket?
UNIVERSIDADE DA CORUÑA
• Es un extremo de un enlace de comunicación bidireccional
entre dos programas que se comunican por la red.
– Un socket se asocia a un número de puerto.
• Se identifica por dirección IP de la máquina + número de
puerto.
• Existen en TCP y UDP.
Octubre 2007
Laboratorio de Redes de Comunicaciones
12
Sockets TCP (1)
UNIVERSIDADE DA CORUÑA
• Sockets orientados a conexión.
• El servidor se ejecuta en una máquina y crea un socket
orientado a conexión ligado a un número de puerto
específico.
– El servidor espera, escuchando por ese socket, a que los clientes
hagan peticiones de conexión.
• El cliente conoce:
– La máquina donde se está ejecutando el servidor
– El puerto donde el servidor está escuchando.
p
u
e
Servidor
Servidor
r
t
o
l
i
s
t
e
n
Petición de
conexión
p
u
e
r
t
o
Cliente
Cliente
Octubre 2007
Laboratorio de Redes de Comunicaciones
13
Sockets TCP (2)
UNIVERSIDADE DA CORUÑA
• El cliente envía una petición de conexión al servidor,
usando esa máquina y número puerto.
• Además, el cliente tiene que identificarse ante el servidor,
por tanto al cliente se le asigna un puerto en su máquina,
que será utilizado a lo largo de la conexión.
– Normalmente esta asignación la realiza el sistema.
• Si todo va bien el servidor acepta la conexión.
– El servidor obtiene un nuevo socket asociado al mismo puerto
local que el original, y que tiene como otro extremo de la conexión
la dirección y puerto del cliente.
– Es necesario crear un nuevo socket para atender al cliente, para
poder seguir recibiendo peticiones de conexión a través del socket
original.
Octubre 2007
Laboratorio de Redes de Comunicaciones
14
Sockets TCP (3)
UNIVERSIDADE DA CORUÑA
• En el lado cliente, si la conexión es aceptada, se obtiene un socket
conectado con el servidor.
• A partir de ahí, cliente y servidor se comunican escribiendo y leyendo
por sus respectivos sockets.
p
u
e
Servidor
Servidor
r
t
o
l
i
s
t
e
n
Conexión
p
u
e
r
t
o
Cliente
Cliente
• Clases:
– java.net.Socket: Implementa un extremo de una conexión bidireccional.
– java.net.ServerSocket: Implementa un socket que los servidores pueden
utilizar para escuchar y aceptar peticiones de clientes.
Octubre 2007
Laboratorio de Redes de Comunicaciones
15
Sockets UDP (1)
UNIVERSIDADE DA CORUÑA
• Sockets NO orientados a conexión.
– Se envían y reciben paquetes independientes de información
– Clientes y servidores NO se conectan
– NO se garantiza la recepción del paquete ni el orden.
• Datagrama:
– Mensaje independiente, enviado a través de una red cuya llegada, tiempo
de llegada y contenido no está garantizado.
• El servidor se ejecuta en una máquina y crea un socket no orientado a
conexión que está ligado a un número de puerto específico.
– A partir de ahí el servidor recibe todos los datos enviados a ese puerto
UDP, leyendo a través de ese socket.
• El cliente conoce:
– La máquina donde se está ejecutando el servidor
– El puerto asociado al servidor.
Octubre 2007
Laboratorio de Redes de Comunicaciones
16
Sockets UDP (2)
UNIVERSIDADE DA CORUÑA
• El cliente crea un socket no orientado a conexión ligado a un número
de puerto específico y lo utiliza para enviar Datagramas al servidor.
– Normalmente la asignación del número de puerto en el cliente la hace el
sistema.
– Los Datagramas enviados deben contener la dirección y número de puerto
del servidor al que van dirigidos.
• Cuando un servidor recibe un Datagrama:
– Obtiene la dirección de la máquina del cliente y su número de puerto.
– Envía la respuesta al cliente creando un Datagrama dirigido a esa máquina
y puerto.
• Clases:
– java.net.DatagramSocket
– java.net.DatagramPacket
Octubre 2007
Laboratorio de Redes de Comunicaciones
17
Direcciones IP
UNIVERSIDADE DA CORUÑA
• Clase java.net.InetAddress:
– Métodos estáticos:
• InetAddress getByName(String host)
– Obtiene la dirección IP de la máquina
– Recibe el nombre de la máquina o su dirección IP como cadena.
• InetAddres[] getAllByName(String host)
– Otiene todas las direcciones IP de una máquina.
– Recibe el nombre de la máquina o su dirección IP como cadena.
• InetAddress getLocalHost():
– Obtiene la dirección IP de la máquina en la que se está ejecutando.
– Método:
• public String getHostName()
– Devuelve el nombre de la máquina correspondiente a esta IP.
Octubre 2007
Laboratorio de Redes de Comunicaciones
18
TCP - Cliente (1)
UNIVERSIDADE DA CORUÑA
• Operación:
Comentarios de: Programación con Sockets en Java - Laboratorio de Redes de Comunicaciones (1)
Alvaro Pino N.
Profesor de Programación Concurrente
Universidad de Panamá
Facultad de Informática, Electrónica y Comunicación.
Departamento de Informática