Java.net.DatagramPacket class in Java
Last Updated :
15 Dec, 2021
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-
- 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.
- offset : It represents the offset into the buffer array.
- 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.
- InetAddress address : This is the destination to which the message is to be delivered.
- port : This is the port to which the message will be delivered.
- SocketAddress address : The information about the address and port can be represented with the help of socket address. Same function as the above two combined.
For sending purpose, following constructors are used :
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
For receiving purpose, following constructors are used :
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
Methods :
- getAddress() : Returns the IP address to which this packet is sent to or from which it was received.
Syntax :public InetAddress getAddress()
- 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()
- 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()
- getOffset() : Returns the offset specified.
Syntax : public int getOffset()
- getLength() : Returns the length of the data to send or receive
Syntax : public int getLength()
- 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
Syntax : public void setData(byte[] buf)
Parameters :
buf : data buffer
- setAddress() : Used to set the address to which this packet is sent.
Syntax : public void setAddress(InetAddress iaddr)
Parameters :
iaddr : InetAddress of the recipient
- setPort() : Set the port on which destination will receive this packet.
Syntax :public void setPort(int iport)
Parameters :
iport : the port number
- setSocketAddress() : Used to set the socket address of the destination(IP address+ port number).
Syntax : public void setSocketAddress(SocketAddress address)
Parameters :
address : socket address
- 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()
- setLength() : Used to set the length for this packet.
Syntax :public void setLength(int length)
Parameters :
length : length of the packet
Java Implementation :
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());
}
}
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
Similar Reads
Java.net.DatagramSocket class in Java
Datagram socket is a type of network socket which provides connection-less point for sending and receiving packets. Every packet sent from a datagram socket is individually routed and delivered. It can also be used for sending and receiving broadcast messages. Datagram Sockets is the java's mechanis
9 min read
Java.io.DataInputStream class in Java | Set 1
A data input stream enables an application to read primitive Java data types from an underlying input stream in a machine-independent way(instead of raw bytes). That is why it is called DataInputStream - because it reads data (numbers) instead of just bytes. An application uses a data output stream
3 min read
Java.io.DataInputStream class in Java | Set 2
Java.io.DataInputStream class in Java | Set 1 More Methods: byte readByte() : Reads and returns one input byte. Syntax:public final byte readByte() throws IOException Returns: the next byte of this input stream as a signed 8-bit byte. Throws: EOFException IOException float readFloat() : Reads four i
3 min read
Java.net.JarURLConnection class in Java
Prerequisite - JAR files in Java What is a Jar file? JavaArchive(JAR) bundles all the classes in one package. Since the archive is compressed and can be downloaded in a single HTTP connection, it is often faster to download the archive than to download individual classes. Although jar bundles all th
4 min read
Java.Lang.Double Class in Java
Double class is a wrapper class for the primitive type double which contains several methods to effectively deal with a double value like converting it to a string representation, and vice-versa. An object of the Double class can hold a single double value. Double class is a wrapper class for the pr
4 min read
java.nio.FloatBuffer Class in Java
A Buffer object can be termed as a container for a fixed amount of data. The buffer acts as a storing box, or temporary staging area, where data can be stored and later retrieved according to the usage. Java Buffer classes are the foundation or base upon which java.nio is built. Float buffers are cr
4 min read
java.net.Proxy Class in Java
A proxy is an immutable object and type of tool or application or program or system, which helps to protect the information of its users and computers. It acts as a barrier between computer and internet users. A Proxy Object defines the Proxy settings to be used with a connection. Proxy servers are
3 min read
java.net.Socket Class in Java
The java.net.Socket class allows us to create socket objects that help us in implementing all fundamental socket operations. We can perform various networking operations such as sending, reading data and closing connections. Each Socket object that has been created using with java.net.Socket class h
5 min read
Java.lang.Class class in Java | Set 1
Java provides a class with name Class in java.lang package. Instances of the class Class represent classes and interfaces in a running Java application. The primitive Java types (boolean, byte, char, short, int, long, float, and double), and the keyword void are also represented as Class objects. It
15+ min read
java.lang.reflect.Field Class in Java
The ability of the software to analyze itself is known as Reflection. This is provided by the java.lang.reflect package and elements in Class .Field serves the same purpose as the whole reflection mechanism, analyze a software component and describe its capabilities dynamically, at run time rather t
5 min read