2. UDP
UDP(User Datagram Protocol)
- Protocolo de transporte sin conexión
- No garantiza un servicio extremo a extremo fiable
- No controla la pérdida de paquetes, los errores o la duplicidad
- Utilizado en aplicaciones en las que la rapidez en la entrega es más importante
que la seguridad
- Ejemplos: DNS, SNMP, RIP, RTP, etc
Java advanced programming
3. UDP - Puntos claves
La clase DatagramPacket, junto con la clase DatagramSocket, son las
que se utilizan para la implementación del protocolo UDP.
Para enviar datos a través de UDP, hay que construir un objeto de
tipo DatagramPacket y enviarlo a través de un objeto DatagramSocket, y
al revés para recibirlos, es decir, a través de un objeto
DatagramSocket se recoge el objeto DatagramPacket. Toda la
información respecto a la dirección, puerto y datos, está contenida en el
paquete.
Para enviar un paquete, primero se construye ese paquete con la
información que se desea transmitir, luego se almacena en un
objeto DatagramSocket y, finalmente se invoca el método send() sobre
ese objeto. Para recibir un paquete, primero se construye un paquete
vacío, luego se le presenta a un objeto DatagramSocket para que
almacene allí el resultado de la ejecución del método receive() sobre ese
objeto.
Java advanced programming
4. DatagramPacket I
La clase DatagramPacket representa un paquete de datos destinados a la
transmisión mediante el uso de UDP. Los paquetes son contenedores de
una pequeña secuencia de bytes, e incluyen información de
direccionamiento, como una dirección IP y un puerto.
Java advanced programming
5. DatagramPacket II
Hay dos razones para crear un nuevo DatagramPacket:
- Para enviar datos a una máquina remota usando UDP
- Para recibir los datos enviados por una máquina remota usando UDP
La clase DatagramPacket proporciona un constructor que permite crear
instancias de un array de bytes para el mensaje, la longitud del mensaje, la
dirección Internet y el puerto local del socket de destino.
Java advanced programming
6. DatagramPacket III
Métodos
- InetAddress getAddress() - devuelve la dirección IP desde que
unDatagramPacket fue enviado, o (si el paquete va a ser enviado a una
máquina remota), la dirección IP de destino.
- byte [] getData () - devuelve el contenido de la DatagramPacket, representado
como una matriz de bytes.
- int getLength int () - devuelve la longitud de los datos almacenados en
un DatagramPacket. Esto puede ser menor que el tamaño real del búfer de
datos
- int getPort () - devuelve el número de puerto desde donde se envió
un DatagramPacket, o (si el paquete va a ser enviado a una máquina remota),
el número de puerto de destino.
Java advanced programming
7. DatagramSocket I
La clase DatagramSocket puede ser creada para ser usada como
cliente o como servidor.
La clase DatagramSocket proporciona acceso a un socket UDP, lo que
permite que los paquetes UDP puedan ser enviados y recibidos. Un
DatagramPacket se utiliza para representar un paquete UDP, y debe ser
creado antes de recibir los paquetes. El mismo DatagramSocket puede
ser usado para recibir los paquetes tanto como para enviarlos.
Las operaciones de lectura son de bloqueo, lo que significa que la
aplicación continuara esperando hasta que llega un paquete. Ya que los
paquetes UDP no garantizan la entrega, esto puede causar que una
aplicación se detenga si el remitente no vuelva a enviar los paquetes. Ya
que los paquetes UDP no garantizan la entrega, esto puede originar que
una aplicación se detenga si el remitente no vuelva a enviar los paquetes.
Java advanced programming
8. DatagramSocket II
Métodos
- void close();
- void connect(InetAddress remote_addr remote_port int);
- void disconnect();
- InetAddress getInetAddress();
- int getPort();
- InetAddress getLocalAddress();
- int getLocalPort();
- int getReceiveBufferSize() throws java.net.SocketException
- int getSendBufferSize () throws java.net.SocketException
- getSoTimeout int () throws java.net.SocketException
- void receive (DatagramPacket packet)) throws java.io.IOException
Java advanced programming
9. Multicast I
El Multicast es un método de direccionamiento IP. Una dirección multicast
está asociada con un grupo de receptores interesados. De acuerdo al RFC
3171 las direcciones desde la 224.0.0.0 a la 239.255.255.255 están
destinadas para ser direcciones de multicast. Este rango se llama
formalmente "Clase D". El emisor envía un único datagrama (desde la
dirección unicast del emisor) a la dirección multicast y el router se
encargará de hacer copias y enviarlas a todos los receptores que hayan
informado de su interés por los datos de ese emisor.
Java advanced programming
10. Multicast II
Java proporciona una interfaz de datagramas para multicast IP a través de
la clase MulticastSocket, que es una subclase de DatagramSocket, con la
capacidad adicional de ser capaz de pertenecer a grupos multicast.
La clase MulticastSocket proporciona dos constructores alternativos:
MulticastSocket(): que crea el socket en cualquiera de los puertos locales
libres.
MulticastSocket(int port): que crea el socket en el puerto local indicado.
Un proceso puede pertenecer a un grupo multicast invocando el método
joinGroup(InetAddress mcastaddr) de su socket multicast. Así, el socket
pertenecerá a un grupo de multidifusión en un puerto dado y recibirá los
datagramas enviados por los procesos en otros computadores a ese grupo
en ese puerto. Un proceso puede dejar un grupo dado invocando el
método leaveGroup(InetAddress mcastaddr) de su socket multicast.
Java advanced programming
11. Multicast III
Envió:
Para enviar datos a un grupo multicast se utiliza el método
send(DatagramPacket p), este método es muy similar al de la clase
DatagramSocket, la diferencia es que este datagrama será enviado a todos
los miembros del grupo multicast.
Recepción:
Para recibir datos de un grupo multicast se utiliza el método
receive(DatagramPacket p) de la clase DatagramSocket superclase de
MulticastSocket.
Nota:
Es necesario pertenecer a un grupo para recibir mensajes multicast
enviados a ese grupo, pero no es necesario para enviar mensajes.
Java advanced programming