Java.net.DatagramPacket class in Java

This class provides facility for connection less transfer of messages from one system to another. Each message is routed only on the basis of information contained within the packet and it may be possible for different packets to route differently. There is also no guarantee as to whether the message will be delivered or not, and they may also arrive out of order. This class provides mechanisms for creation of datagram packets for connectionless delivery using datagram socket class.
Constructors : The constructors vary according to their use, i.e. for receiving or for sending the packet. The important parameters used in these constructors are-

  1. buf : This is the actual message that is to be delivered or received. Datagram packets receive or send data in stuffed in a byte array. If this is used in constructor for sending the message, than this represents the message to be delivered, when used for receiving purpose, it represents the buffer where the received message will be stored.
  2. offset : It represents the offset into the buffer array.
  3. length : It is the actual size of packet to receive. This must be less than or equal to the size of buffer array or else there will be overflow as received message wont fit into the array.
  4. InetAddress address : This is the destination to which the message is to be delivered.
  5. port : This is the port to which the message will be delivered.
  6. SocketAddress address : The information about the address and port can be represented wih the help of socket address. Same function as the above two combined.

For sending purpose, following constructors are used :

  1. 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
    
  2. 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
    
  3. 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
    
  4. Syntax :public DatagramPacket(byte[] buf,
                  int length,
                  SocketAddress address)
    Parameters :
    buf : byte array
    length : length of message to deliver
    address : socket address of destination
    

For receiving purpose, following constructors are used :

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

Methods :

  1. getAddress() : Returns the IP address to which this packet is sent to or from which it was received.
    Syntax :public InetAddress getAddress()
  2. getPort() : Returns the port to which this packet is sent to or from which it was received. This method is specifically used on the server from getting the port of the client who sent the request.
    Syntax : public int getPort()
  3. getData() : Returns the data contained in this packet as a byte array. The data starts from the offset specified and is of length specified.
    Syntax : public byte[] getData()
  4. getOffset() : Returns the offset specified.
    Syntax : public int getOffset()
  5. getLength() : Returns the length of the data to send or receive
    Syntax : public int getLength()
  6. setData() : Used to set the data of this packet.
    Syntax : public void setData(byte[] buf,
               int offset,
               int length)
    Parameters :
    buf : data buffer
    offset :offset into the data
    length : length of the data
    
  7. Another overloaded method in which offset is set to 0 and lenght is set to length of the buffer.

  8. Syntax : public void setData(byte[] buf)
    Parameters :
    buf : data buffer
  9. setAddress() : Used to set the address to which this packet is sent.
    Syntax : public void setAddress(InetAddress iaddr)
    Parameters : 
    iaddr : InetAddress of the recipient
    
  10. setPort() : Set the port on which destination will receive this packet.
    Syntax :public void setPort(int iport)
    Parameters : 
    iport : the port number
  11. setSocketAddress() : Used to set the socket address of the destination(IP address+ port number).
    Syntax : public void setSocketAddress(SocketAddress address)
    Parameters :
    address : socket address
  12. getSocketAddress() : Returns the socket address of this packet. In case it was received, return the socket address of the host machine.
    Syntax : public SocketAddress getSocketAddress()
  13. setLength() : Used to set the length for this packet.
    Syntax :public void setLength(int length)
    Parameters :
    length : length of the packet

Java Implementation :

//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());

    }
}

Output :

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

For a detailed implementation of a client-server program that uses datagram socket to send the actual packets over the network, please refer to – Working with UDP Datagram Sockets
References :
Official Java Documentation
This article is contributed by Rishabh Mahrsee. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.

Recommended Posts:



0 Average Difficulty : 0/5.0
No votes yet.