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.
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.
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.
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.
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).
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.
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().
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.
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.
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
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.
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.
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
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.