2 User Datagram Protocol (UDP)


2.2 Clase DatagramPacket

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.
Sin_título_2.png

Figura Nº 10: DatagramPacket

El significado de los datos almacenados en un DatagramPacket está determinado por su contexto. Cuando un DatagramPacket se ha leído desde un socket UDP, la dirección IP del paquete representa la dirección del remitente (lo mismo con el número de puerto). Sin embargo, cuando un DatagramPacket es usado para enviar un paquete UDP, la dirección IP almacenada en DatagramPacket representa la dirección del destinatario (lo mismo con el número de puerto). Esta inversión de sentido es importante Recuerde uno no querrá enviar un paquete de regreso a uno mismo.

2.2.1 Creando un DatagramPacket
Hay dos razones para crear un nuevo DatagramPacket:
I. Para enviar datos a una máquina remota usando UDP
II. 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, de la siguiente forma:

Constructores
La elección del constructor DatagramPacket es determinada por su finalidad.
Cada constructor requiere la especificación de un conjunto de bytes, el cual se utilizará para almacenar el contenido del paquete UDP, y la longitud del paquete de datos.

Para crear un DatagramPacket para la recepción de paquetes UDP entrantes, el siguiente constructor debe ser usado:DatagramPacket(byte[] buffer, int length).Por ejemplo:DatagramPacket packet = new DatagramPacket(new byte[256], 256);
Para enviar un DatagramPacket a una máquina remota, es preferible utilizar el siguientes constructor:DatagramPacket(byte[] buffer, int length, InetAddress dest_addr, int dest_port).Por ejemplo:InetAddress addr = InetAddress.getByName("192.168.0.1")DatagramPacket packet = new DatagramPacket ( new byte[128], 128, addr, 2000);

2.2.2 Usando un DatagramPacketLa clase DatagramPacket proporciona algunos métodos importantes que permiten a: la dirección remota, puerto remoto, los datos (como un bytes de array), y la longitud del paquete puedan ser recuperado. A partir de JDK 1.1, hay también métodos para modificar estos, a través de un método set correspondiente. Esto significa que uno recibepaquetes que puedan ser reutilizados. Por ejemplo, el contenido de un paquete puede ser reemplazado y enviado de vuelta al remitente. Esto ahorra el tener que reiniciar la información de direccionamiento, la dirección y el puerto del paquete que ya está establecido en el remitente.

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.
  • void setAddress (InetAddress addr) - asigna una nueva dirección de destino a un DatagramPacket.
  • void setData (byte [] buffer) - asigna un buffer de datos nuevos a la DatagramPacket.
  • void SetLength (int length) - asigna una nueva longitud de la DatagramPacket.
  • Void setPort (int port) - asigna un puerto de destino a un nuevo DatagramPacket.


back_button.gifnext_button.gif