Tema 2 - Sockets

Transcripción

Tema 2 - Sockets
Tema II. Sockets
Desarrollo de Aplicaciones para Internet
Curso 12|13
Miguel Reboiro Jato
Índice
1. ¿Qué es un Socket?
2. Tipos de Socket
3. Sockets en Java
1. InetAddress y SocketAddress
2. Socket y ServerSocket
3. DatagramSocket y DatagramPacket
4. Ejemplos con flujos de E/S
5. URL y URLConnection
4. Referencias
Índice
1. ¿Qué es un Socket?
2. Tipos de Socket
3. Sockets en Java
1. InetAddress y SocketAddress
2. Socket y ServerSocket
3. DatagramSocket y DatagramPacket
4. Ejemplos con flujos de E/S
5. URL y URLConnection
4. Referencias
¿Qué es un Socket?
●
●
Extremo de un enlace de comunicaciones entre
dos programas ejecutándose sobre una red
Está compuesto por:
●
Una dirección IP*
●
Un número de puerto
●
Un protocolo*
* Los hemos visto en el tema anterior
Puertos
●
●
●
Puntos de entrada y salida a los que se puede
asociar una aplicación
Una aplicación puede escuchar en un puerto
para recibir y aceptar peticiones
La dirección de los puertos tiene 16 bits
●
●
0-1023: Puertos bien conocidos. Reservados para
protocolos de aplicación conocidos.
1024-65535: Puertos de uso libre. Suelen ser
utilizados por aplicaciones con protocolos de
comunicación propios o por aplicaciones cliente
¿Dónde se Ubican?
Índice
1. ¿Qué es un Socket?
2. Tipos de Socket
3. Sockets en Java
1. InetAddress y SocketAddress
2. Socket y ServerSocket
3. DatagramSocket y DatagramPacket
4. Ejemplos con flujos de E/S
5. URL y URLConnection
4. Referencias
Tipos de Socket
●
Existen tres tipos de socket*:
●
●
●
Stream sockets: Orientados a conexión. Usan
TCP (o SCTP)
Datagram sockets: No orientados a conexión.
Usan UDP
Raw sockets: Comunicación raw en la que se
ignora la capa de transporte
* En el contexto de Internet
¿Cómo funcionan?
●
Stream Sockets (TCP)
1.Servidor: Un programa inicia la escucha en un
socket
2.Cliente: El cliente solicita la conexión al socket del
servidor. Deberá conocer el nombre de host o IP
del servidor y el número de puerto
1
Escucha
Servidor
P
u
e
r
t
o
Solicitud de
Conexión
2
P
u
e
r
t
o
Cliente
¿Cómo funcionan?
●
Stream Sockets (TCP) (Continuación.)
3.Servidor: Acepta la conexión => Se crea un enlace
en el socket entre el servidor y el cliente
4.Cliente: Recibe la aceptación y ya puede
escribir/leer a través del socket
5.Servidor: Se mantiene a la escucha de nuevas
conexiones
Escucha
Servidor
P
u
e
r
t
o
Conexión
P
u
e
r
t
o
Cliente
¿Cómo funcionan?
●
Datagram Sockets
1.Destinatario: Un programa inicia la escucha en un
socket
2.Remitente: Envía un datagrama con la información
a enviar y la dirección a la que desea enviarlo
3.Destinatario: Recibe el datagrama enviado por el
cliente
Streams vs Datagrams
●
Streams (TCP)
●
●
●
El primer paso es
establecer la conexión
Las comunicaciones
se hacen a través de
flujos (en Java
InputStream y
OutputStream)
No hay pérdida de
información
●
Datagrams (UDP)
●
●
●
No es necesario
establecer conexión
Cada mensaje se
envía en un paquete
independiente
Pueden perderse
paquetes o llegar
desordenados
Índice
1. ¿Qué es un Socket?
2. Tipos de Socket
3. Sockets en Java
1. InetAddress y SocketAddress
2. Socket y ServerSocket
3. DatagramSocket y DatagramPacket
4. Ejemplos con flujos de E/S
5. URL y URLConnection
4. Referencias
Sockets en Java
●
Paquetes necesarios
●
●
●
java.net: Contiene las clases necesarias para el trabajo con la red
java.io: Las clases para el trabajo con flujos (streams) y serialización
son básicas para el trabajo con la red
Clases importantes
●
java.net.InetAddress
●
java.net.DatagramSocket
●
java.net.SocketAddress
●
java.net.DatagramPacket
●
java.net.InetSocketAddress
●
java.net.URL
●
java.net.Socket
●
java.net.URLConnection
●
java.net.ServerSocket
Índice
1. ¿Qué es un Socket?
2. Tipos de Socket
3. Sockets en Java
1. InetAddress y SocketAddress
2. Socket y ServerSocket
3. DatagramSocket y DatagramPacket
4. Ejemplos con flujos de E/S
5. URL y URLConnection
4. Referencias
java.net.InetAddress
●
Representa una dirección IP (versión 4 o 6)
●
Las instacias de InetAddress contienen:
●
●
Una dirección IP
●
Un nombre de host (opcional)
Se construyen mediante los métodos estáticos de la clase
(getByAddress, getByName, getLocalHost, etc.).
Ejemplos:
●
InetAddress.getLocalHost()
●
InetAddress.getByName("www.esei.uvigo.es")
java.net.SocketAddress
●
Representa la dirección de un socket (IP + puerto)
●
Es una clase abstracta
●
●
La implementación java.net.InetSocketAddress
combina esta clase con java.net.InetAdress
Ejemplos:
●
new InetSocketAddress("www.esei.uvigo.es", 80)
●
new InetSocketAddress(
InetAddress.getLocalHost(), 23
)
Índice
1. ¿Qué es un Socket?
2. Tipos de Socket
3. Sockets en Java
1. InetAddress y SocketAddress
2. Socket y ServerSocket
3. DatagramSocket y DatagramPacket
4. Ejemplos con flujos de E/S
5. URL y URLConnection
4. Referencias
java.net.Socket
●
●
Representa un extremo de una conexión
TCP*
Funciones principales
●
●
●
Establecer conexión con un servidor (constructor o
connect)
Proporcionar acceso a los flujos de entrada/salida
(getInputStream y getOutputStream)
Informar sobre la conexión y su estado
* Aunque puede trabajar con UDP, el soporte está obsoleto
java.net.ServerSocket
●
Representa un socket TCP servidor
●
Funciones principales
●
●
Permite escuchar en un puerto (constructor o bind)
●
Una vez en escucha, permite aceptar conexiones (accept)
●
Informa sobre el estado del socket
Conexiones
●
●
El método accept es bloqueante, por lo que la ejecución
se detendrá hasta que se produzca una conexión
Se puede usar el método setSoTimeout para establecer
un tiempo máximo de espera por conexiones
Ejemplo HelloWorld TCP
Servidor
Cliente
Índice
1. ¿Qué es un Socket?
2. Tipos de Socket
3. Sockets en Java
1. InetAddress y SocketAddress
2. Socket y ServerSocket
3. DatagramSocket y DatagramPacket
4. Ejemplos con flujos de E/S
5. URL y URLConnection
4. Referencias
java.net.DatagramSocket
●
Representa un socket para UDP
●
Envío de paquetes (send)
●
●
●
Cada datagrama contendrá la dirección (host+puerto)
de destino
Recepción de paquetes (receive)
●
●
La instancia no tiene que estar asociada a ningún
puerto*
La instancia tiene que estar asociada al puerto en el
que se recibirán los datagramas (constructor o bind)
Soporta mensajes broadcast
* Java también permite trabajar como si existiese una conexión usando connect
java.net.DatagramPacket
●
Representa un datagrama UDP
●
Envío de paquetes
●
●
●
Si no existe conexión en el socket, debe contener
la dirección (host+puerto) de destino
El contenido del paquete es un array de bytes
Recepción de paquetes
●
●
El contenido del datagrama se almacena en el
búffer interno
Si el contenido de un datagrama no cabe en el
búffer se truncarán los datos
Ejemplo HelloWorld UDP
Destinatario
Remitente
Índice
1. ¿Qué es un Socket?
2. Tipos de Socket
3. Sockets en Java
1. InetAddress y SocketAddress
2. Socket y ServerSocket
3. DatagramSocket y DatagramPacket
4. Ejemplos con flujos de E/S
5. URL y URLConnection
4. Referencias
Ejemplo Echo TCP
Servidor
Cliente
Ejemplo Echo UDP
Destinatario
Remitente
Ejemplo Message UDP
Objeto Mensaje (Message)
Ejemplo Message UDP
Destinatario
Remitente
Índice
1. ¿Qué es un Socket?
2. Tipos de Socket
3. Sockets en Java
1. InetAddress y SocketAddress
2. Socket y ServerSocket
3. DatagramSocket y DatagramPacket
4. Ejemplos con flujos de E/S
5. URL y URLConnection
4. Referencias
java.net.URL
●
Representa una dirección URL (Uniform
Resource Locator)
●
También existe la clase java.net.URI
●
Funciones principales
●
●
●
Valida que la URL con la que se crea una instancia
es correcta
Estructura una dirección en sus distintas partes
Permite establecer conexiones
(java.net.URLConnection) con servidores
remotos
java.net.URLConnection
●
●
Representa una conexión a un recurso
(posiblemente a través de la red) identificado
mediante su URL
Funciones principales
●
●
●
●
Interactuar con el recurso remoto
Enviar/recibir información a través de flujos
(getOutputStrem/getInputStream)
Informar sobre el recurso remoto
Existen implementaciones específicas tales como
java.net.HttpURLConnection y
java.net.JarURLConnection
ESEIHomeDownload
Índice
1. ¿Qué es un Socket?
2. Tipos de Socket
3. Sockets en Java
1. InetAddress y SocketAddress
2. Socket y ServerSocket
3. DatagramSocket y DatagramPacket
4. Ejemplos con flujos de E/S
5. URL y URLConnection
4. Referencias
Referencias
●
●
Lessons: All About Sockets [
http://docs.oracle.com/javase/tutorial/networkin
g/sockets/index.html
, última visita 28/08/12]
Lessons: All About Datagrams [
http://docs.oracle.com/javase/tutorial/networki
ng/datagrams/index.html
, última visita 28/08/12]

Documentos relacionados