Clase Java.net.DatagramPacket en Java

Esta clase proporciona facilidad para la conexión sin transferencia de mensajes de un sistema a otro. Cada mensaje se enruta solo en función de la información contenida en el paquete y es posible que diferentes paquetes se enruten de manera diferente. Tampoco hay garantía de que el mensaje se entregue o no, y también pueden llegar desordenados. Esta clase proporciona mecanismos para la creación de paquetes de datagramas para la entrega sin conexión utilizando la clase de socket de datagramas. 
Constructores: Los constructores varían según su uso, es decir, para recibir o para enviar el paquete. Los parámetros importantes utilizados en estos constructores son: 
 

  1. buf : Este es el mensaje real que se va a entregar o recibir. Los paquetes de datagramas reciben o envían datos en una array de bytes. Si esto se usa en el constructor para enviar el mensaje, representa el mensaje que se entregará, cuando se usa para recibir, representa el búfer donde se almacenará el mensaje recibido.
  2. offset : representa el desplazamiento en la array de búfer.
  3. length : Es el tamaño real del paquete a recibir. Debe ser menor o igual que el tamaño de la array de búfer o, de lo contrario, habrá un desbordamiento ya que el mensaje recibido no encajará en la array.
  4. Dirección InetAddress : este es el destino al que se entregará el mensaje.
  5. puerto : Este es el puerto al que se entregará el mensaje.
  6. Dirección de SocketAddress : la información sobre la dirección y el puerto se puede representar con la ayuda de la dirección del socket. Misma función que las dos anteriores combinadas.

Para fines de envío , se utilizan los siguientes constructores: 
 

Syntax :public DatagramPacket(byte[] buf,
              int offset,
              int length,
              InetAddress address,
              int port)
Parameters :
buf : byte array
offset : offset into the array
length : length of message to deliver
address : address of destination
port : port number of destination
Syntax :public DatagramPacket(byte[] buf,
              int offset,
              int length,
              SocketAddress address)
Parameters :
buf : byte array
offset : offset into the array
length : length of message to deliver
address : socket address of destination
Syntax :public DatagramPacket(byte[] buf,
              int length,
              InetAddress address,
              int port)
Parameters :
buf : byte array
length : length of message to deliver
address : address of destination
port : port number of destination
Syntax :public DatagramPacket(byte[] buf,
              int length,
              SocketAddress address)
Parameters :
buf : byte array
length : length of message to deliver
address : socket address of destination

Para fines de recepción , se utilizan los siguientes constructores: 
 

Syntax :public DatagramPacket(byte[] buf,
              int offset,
              int length)
Parameters :
buf : byte array
offset : offset into the array
length : length of message to deliver
Syntax :public DatagramPacket(byte[] buf,
              int length)
Parameters :
buf : byte array
length : length of message to deliver

Métodos : 
 

  1. getAddress() : Devuelve la dirección IP a la que se envía este paquete o desde la que se recibió. 
     
Syntax :public InetAddress getAddress()
  1. getPort() : Devuelve el puerto al que se envía este paquete o desde el que se recibió. Este método se usa específicamente en el servidor para obtener el puerto del cliente que envió la solicitud. 
     
Syntax : public int getPort()
  1. getData() : Devuelve los datos contenidos en este paquete como una array de bytes. Los datos comienzan desde el desplazamiento especificado y tienen la longitud especificada. 
     
Syntax : public byte[] getData()
  1. getOffset() : Devuelve el desplazamiento especificado. 
     
Syntax : public int getOffset()
  1. getLength() : Devuelve la longitud de los datos para enviar o recibir 
     
Syntax : public int getLength()
  1. setData() : Se utiliza para configurar los datos de este paquete. 
     
Syntax : public void setData(byte[] buf,
           int offset,
           int length)
Parameters :
buf : data buffer
offset :offset into the data
length : length of the data
Syntax : public void setData(byte[] buf)
Parameters :
buf : data buffer
  1. setAddress() : se utiliza para establecer la dirección a la que se envía este paquete. 
     
Syntax : public void setAddress(InetAddress iaddr)
Parameters : 
iaddr : InetAddress of the recipient
  1. setPort() : establece el puerto en el que el destino recibirá este paquete. 
     
Syntax :public void setPort(int iport)
Parameters : 
iport : the port number
  1. setSocketAddress() : se usa para establecer la dirección del socket del destino (dirección IP + número de puerto). 
     
Syntax : public void setSocketAddress(SocketAddress address)
Parameters :
address : socket address
  1. getSocketAddress() : Devuelve la dirección de socket de este paquete. En caso de que se haya recibido, devuelva la dirección de socket de la máquina host. 
     
Syntax : public SocketAddress getSocketAddress()
  1. setLength() : Se utiliza para establecer la longitud de este paquete. 
     
Syntax :public void setLength(int length)
Parameters :
length : length of the packet

Implementación Java: 
 

Java

//Java program to illustrate various
//DatagramPacket class methods
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.util.Arrays;
 
public class datapacket
{
    public static void main(String[] args) throws IOException
    {
 
        byte ar[] = { 12, 13, 15, 16 };
        byte buf[] = { 15, 16, 17, 18, 19 };
        InetAddress ip = InetAddress.getByName("localhost");
         
        // DatagramPacket for sending the data
        DatagramPacket dp1 = new DatagramPacket(ar, 4, ip, 1052);
 
        // setAddress() method
        // I have used same address as in initiation
        dp1.setAddress(ip);
 
        // getAddress() method
        System.out.println("Address : " + dp1.getAddress());
         
        // setPort() method
        dp1.setPort(2525);
         
        // getPort() method
        System.out.println("Port : " + dp1.getPort());
         
        // setLength() method
        dp1.setLength(4);
         
        // getLength() method
        System.out.println("Length : " + dp1.getLength());
         
        // setData() method
        dp1.setData(buf);
         
        // getData() method
        System.out.println("Data : " + Arrays.toString(dp1.getData()));
         
        // setSocketAddress() method
        //dp1.setSocketAddress(address.getLocalSocketAddress());
         
        // getSocketAddress() method
        System.out.println("Socket Address : " + dp1.getSocketAddress());
 
        // getOffset() method
        System.out.println("Offset : " + dp1.getOffset());
 
    }
}

Producción : 
 

Address : localhost/127.0.0.1
Port : 2525
Length : 4
Data : [15, 16, 17, 18, 19]
Socket Address : localhost/127.0.0.1:2525
Offset : 0

Para obtener una implementación detallada de un programa cliente-servidor que utiliza un socket de datagramas para enviar los paquetes reales a través de la red, consulte: Trabajo con referencias de sockets de datagramas UDP :  Documentación oficial de Java Este artículo es una contribución de Rishabh Mahrsee . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 
 

 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *