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]