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:
- 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.
- offset : representa el desplazamiento en la array de búfer.
- 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.
- Dirección InetAddress : este es el destino al que se entregará el mensaje.
- puerto : Este es el puerto al que se entregará el mensaje.
- 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 :
- getAddress() : Devuelve la dirección IP a la que se envía este paquete o desde la que se recibió.
Syntax :public InetAddress getAddress()
- 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()
- 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()
- getOffset() : Devuelve el desplazamiento especificado.
Syntax : public int getOffset()
- getLength() : Devuelve la longitud de los datos para enviar o recibir
Syntax : public int getLength()
- 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
- 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
- setPort() : establece el puerto en el que el destino recibirá este paquete.
Syntax :public void setPort(int iport) Parameters : iport : the port number
- 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
- 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()
- 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