Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Sockets UDP

Avatar for Reyna Estrella Reyna Estrella
March 04, 2013
65

Sockets UDP

Avatar for Reyna Estrella

Reyna Estrella

March 04, 2013
Tweet

Transcript

  1. Sockets UDP  No está orientado a la conexión. 

    Los datagramas o paquetes pueden viajar en cualquier orden.  No garantiza que lleguen todos los paquetes.
  2.  No hay garantía que el mensaje enviado vía UDP

    llegará a su destino, y los mensajes pueden ser liberados en diferente orden del que fueron enviados (como las cartas enviadas atreves del correo).  Un programa que utiliza sockets UDP debe de estar preparado para hacer frente a la perdida y al reordenamiento de datos.
  3.  Los programadores java usan UDP sockets atreves de las

    clases DatagramPacket y DatagramSocket ambos clientes y servidores usan DatagramSockets para enviar y DatagramPackets para recibir.
  4. Datagram Packet  Mensajes independientes que son intercambiados en la

    comunicación UDP.  Contiene los datos que serán enviados.  También contiene la dirección del remitente
  5. Cliente UDP  Un cliente UDP comienza por enviar un

    datagrama a un servidor que esta pacientemente en la espera de ser conectado.  El típico cliente UDP consta de tres pasos: 1. Construir una instancia de DatagramSocket, opcionalmente especificar la dirección local y puerto. 2. Comunicarse enviando y recibiendo instancias de DatagramPacket usando los métodos send() y receive() de DatagramSocket. 3. Cuando termina desasignar el socket usando el método close() de DatagramSocket.
  6. UDPEchoClientTimeout.java  Manda un datagrama conteniendo el string al que

    se le hará echo.  imprime lo que sea que reciba de vuelta por el servidor.  Por supuesto, un cliente UDP solo se comunica con un servidor UDP.
  7.  Nuestro cliente echo realiza los siguientes pasos:  Enviar

    el echo string al servidor.  Bloquear en receive() por tres segundos, empezar de nuevo si no se recibe respuesta después de que el tiempo se agote.  Finalizar el cliente.
  8. 2.Creación del socket UDP: línea 19 Esta instancia de DatagramSocket

    puede enviar datagramas a cualquier socket UDP no se especifica una dirección local o puerto, entonces una dirección local y puertos disponibles serán seleccionados. Podemos establecerlos explícitamente con setLocalAdress() y setLocalPort() en el constructor si lo deseamos.
  9. 3. Establecer el tiempo de espera del socket: línea 21

    El tiempo de espera para un socket datagrama controla la máxima cantidad de tiempo (milisegundos) de una llamada al método receive() para que este sea bloqueado. Aquí especificamos el tiempo de espera a tres segundos. Los tiempos de espera no son precisos: la llamada puede bloquear por más que el tiempo especificado (pero no menos).
  10. 4. Crear el datagrama a enviar: líneas 23-24 Para crear

    un datagrama para ser enviado, necesitamos especificar tres cosas:  los datos que serán enviados  la dirección destino.  puerto destino. Para la dirección destino podemos identificar al servidor echo de cualquiera de las dos formas por nombre o dirección IP. Si especificamos un nombre, es convertido a su dirección IP en el constructor.
  11. 5. Crear datagrama para recibir: líneas 26-27 Para crear un

    datagrama para recibir, solo necesitamos especificar un arreglo de bytes para guardar los datos del datagrama. La dirección y puerto de la fuente del datagrama será llenada por el método receive().
  12. 6.- Enviar el datagrama: líneas 29-44 Dado que los datagramas

    se pueden perder, tenemos que estar preparados para retransmitir el datagrama. Encerramos en un ciclo while enviando e intentando recibir un echo hasta cinco veces.  Enviar el datagrama: línea 32 send() transmite el datagrama a la dirección y puerto especificado en el datagrama.  Manejar la recepción del datagrama: línea 33-44 receive() bloquea hasta que que se reciba o el tiempo expire. La caducidad del tiempo es indicada por una InterruptedIOException. Si el tiempo expira, incrementamos los intentos incrementando la variable “intentos” y comenzamos de nuevo. Despues de que el máximo número de intentos, el while se sale sin recibir un datagrama. Si receive() es exitoso, establecemos la bandera respuestaRecibida a TRUE, causando que el while termine y se salga a la siguiente línea. Como los paquetes pueden venir de donde sea, checamos la dirección del remitente del datagrama recibido para verificar si coincide con la dirección del servidor echo especificado.
  13. 7. Imprimir los resultados recibidos: líneas 46-50 Si recibimos un

    datagrama, respuestaRecibida es true, y podemos imprimir los datos del datagrama.
  14. Servidor UDP  El típico servidor UDP consta de 3

    pasos:  Construir una instancia de DatagramSocket, especificando el puerto local, y opcionalmente la dirección local. El servidor está ahora listo para recibir datagramas del cliente.  Recibir una instancia de DatagramPacket usando el método receive() de DatagramSocket. Cuando receive() regresa, el datagrama éste contiene la dirección del cliente entonces conocemos a quien mandarle la respuesta.  Comunicarse mandando y recibiendo DatagramPackets utilizando los métodos send() y receive () de DatagramSocket.
  15. UDPEchoServer.java  contiene un ciclo while infinito, recibiendo datagramas y

    después enviando los mismos datagramas de regreso al cliente.  Nuestro servidor solo recibe y manda de regreso los primeros 255 caracteres del datagrama. Cualquier exceso es descartado por la implementación del socket
  16. 1.-Configuración de la aplicación y procesamiento de parámetros: líneas 1-11

    UDPEchoServer establece un simple parámetro, el puerto local del socket servidor echo.
  17. 2.-Crear y configurar el datagram socket: línea 13 A diferencia

    de nuestro cliente UDP, un servidor UDP debe de establecer explícitamente su puerto local a un número conocido por el cliente; De otra manera, el cliente no conocerá el puerto destino para su petición datagrama echo. Cuando el servidor recibe el datagrama echo del cliente, puede encontrar la dirección del cliente y puerto del datagrama.
  18. 3. Crear el datagrama: línea 15 Los mensajes UDP están

    contenidos en datagramas. Construimos una instancia de DatagramPacket con un buffer de un máximo de 255 bytes. Este datagrama será utilizado tanto para enviar como recibir peticiones echo.
  19. 4. Iterativamente manejar peticiones entrantes de echo: líneas 17-23 El

    servidor UDP usa un simple socket para toda la comunicación, a diferencia del servidor TCP, el cual crea un nuevo socket con cada accept() exitoso. Recibir datagrama petición echo, imprimir el remitente: líneas 17-20 El método receive() de DatagramSocket bloquea hasta que un datagrama es recibido por un cliente (almenos que el tiempo de espera sea establecido). No hay conexión, entonces cada datagrama puede venir de un cliente diferente. El datagrama contiene los datos del cliente que lo envió dirección y puerto
  20.  Enviar respuesta echo: línea 22 packet ya contiene el

    echo string y los datos del cliente echo que mando el datagrama, entonces el método send() de DatagramSocket puede transmitir el datagrama previamente recibido.