Comunicaciones basadas en el protocolo UDP

En esta sección pretendo brindar conocimiento sobre las prestaciones básicas que ofrece el protocolo udp.
Puesto que UDP no es un protocolo orientado a conexión, cuando a un nodo le llega un datagrama, necesita la dirección y puerto del nodo origen para saber donde debe contestar. La dirección del nodo origen la puede obtener de la cabecera IP. Mientras que el número de puerto lo obtiene de la cabecera UDP.

Cada mensaje UDP puede albergar hasta 508 bytes, por lo que este protocolo resulta especialmente adecuado para transmitir información que no ocupe mucho tamaño; por otra parte al no se un protocolo fiable, las aplicaciones deben tolerar la perdida de datos, o bien hacerse cargo de las mismas.

En Java las comunicaciones UDP se realizan utilizando la abstracción de socket. Los sockets nos permiten establecer y programar comunicaciones sin tener que conocer los niveles inferiores sobre los que se asientan.

Java proporciona dos clases de especial importancia en la implementación de aplicaciones que hacen uso del protocolo UDP: una para realizar las comunicaciones (DatragramSocket) y otra para albergar los datos y dirección de destino (DatragramPacket), ambas en el paquete java.net.

Primer ejemplo practico:

Vamos a implementar el programa mas sencillo posible que muestre el funcionamiento básico de las comunicaciones UDP: crearemos una clase UDPEnvia y otra UDPRecibe que se encarguen de mandar y recibir, respectivamente, la frase “Hola Mundo”.
La clase UDPEnvia utiliza el paquete java.net para poder crear instancias de la clase DatagramSocket y DatagramPacket. Ej. DatagramSocket MiSocket = new DatagramSocket();

Preparamos el array de bytes que contiene el mensaje a enviar “Hola Mundo”, luego se crea la instancia Paquete de la clase DatagramPacket; el contructor utilizado admite como parámetros:

· Un array de bytes donde se encuentra la información a transmitir.

· Un entero, indicando el número de bytes del array que contienen la información que se desea transmitir.

· Un objeto de tipo InetAddres, que representa la dirección del donde se desea transmitir.

· Un entero que determina el puerto destino donde se envía la información.

Ej.

DatagramPacket(buffer,Mensaje.lenght(),InetAddress.getByteName(“localhost”),1400);

Una vez definido esto estamos en condiciones de enviar el paquete utilizando el metodo send, y luego cerramos la coneccion para liberar recursos.

Ej.

Misocket.send(Paquete);

Misocket.close();

Ejemplo practico – UDPEnvia.java

Import java.net.*;

public class UDPEnvia {

public static void main (String args[] ) {

try {

DatagramSocket MiSocket = new DatagramSocket();

Byte[] buffer = new byte[15];

String Mensaje = “Hola Mundo”;

Buffer=Mensaje.getBytes();

DatagramPacket Paquete = new DatagramPacket (buffer, Mensaje.lenght, InetAddress.getByteName(“localhost”) ,1400);

MiSocket.send(Paquete);

MiSocket.close();

} catch (Exception exc) {

System.out.println(“error”);

} // end try

}

} // end UDPEnvia.


La clase UDPRecibe, al igual que UDP Envia, tambien define un DatagramSocket, un array de bytes donde almacenar la información que llega y un DatagramPacket, donde recoger los datos recibidos.

La instancia de la clase DatagramSocket se define de la siguiente manera DatagramSocket MiSocket = new DatagramSocket(1400);

La instancia del objeto DatagramPacket se define de la siguiente manera: DatagramPacket Paquete = new DatagramPacket (buffer,buffer.lenght);

Una vez definidos los objetos DatagramSocket y DatagramPacket, estamos en condiciones de recibir la información utilizando el metodo receive. Posteriormente recibimos los datos, los datos (metodo getData) que se encuentra en el DatagramPacket.

Import java.net.*;

public clas UDPRecibe {

public static void main (String args[]) {

try {

DatagramSocket MiSocket = new DatagramSOcket(1400);

Byte[] buffer = new Byte[15];

DatagramPacket Paquete = new DatagramPacket(buffer,buffer.lenght);

MiSocket.receibe(Paquete);

System.out.println(new String( Paquete.getData() );

MiSocket.Close();

} catch (Exception e) {

System.out.println(“error”);

}

} //end main

} //end UDPRecibe


Ejecutamos los programas UDPRecibe y UDPEnvia (en ese orden) en consolas diferentes del mismo ordenador o en pcs diferentes (variando la direccion destino).

Anuncios

About exequielc

Hola! Estás en el blog de Exequiel Catalani. Como es un blog, se trata de una extensión más o menos lineal de las cosas que hago y pasan por mi cabeza: ciberculturas, videos de la red, nuevos medios y tecnologia, y Programacion etc...

One response to “Comunicaciones basadas en el protocolo UDP”

  1. gilton says :

    esta bueno el documento

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: