📜  Java Java类

📅  最后修改于: 2022-05-13 01:54:31.472000             🧑  作者: Mango

Java Java类

此类为从一个系统到另一个系统的无连接传输消息提供了便利。每个消息仅根据数据包中包含的信息进行路由,并且不同的数据包可能以不同的方式路由。也不能保证消息是否会被传递,它们也可能会乱序到达。此类提供了使用数据报套接字类创建用于无连接传递的数据报包的机制。
构造函数:构造函数根据它们的用途而变化,即用于接收或发送数据包。这些构造函数中使用的重要参数是 -

  1. buf :这是要传递或接收的实际消息。数据报包接收或发送填充在字节数组中的数据。如果在构造函数中使用 this 来发送消息,则 this 表示要传递的消息,当用于接收时,它表示将存储接收到的消息的缓冲区。
  2. offset :它表示缓冲区数组的偏移量。
  3. length :它是要接收的数据包的实际大小。这必须小于或等于缓冲区数组的大小,否则将出现溢出,因为接收到的消息不适合数组。
  4. InetAddress 地址:这是消息要传递到的目的地。
  5. port :这是消息将被传递到的端口。
  6. SocketAddress地址:地址和端口的信息可以借助套接字地址来表示。与上述两者结合的函数相同。

出于发送目的,使用以下构造函数:

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

出于接收目的,使用以下构造函数:

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

方法 :

  1. getAddress() :返回此数据包发送到或接收到的 IP 地址。
Syntax :public InetAddress getAddress()
  1. getPort() :返回此数据包发送到或接收到的端口。该方法专门用于服务器从获取发送请求的客户端的端口。
Syntax : public int getPort()
  1. getData() :以字节数组的形式返回此数据包中包含的数据。数据从指定的偏移量开始,并具有指定的长度。
Syntax : public byte[] getData()
  1. getOffset() :返回指定的偏移量。
Syntax : public int getOffset()
  1. getLength() :返回要发送或接收的数据的长度
Syntax : public int getLength()
  1. setData() :用于设置此数据包的数据。
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() :用于设置此数据包的发送地址。
Syntax : public void setAddress(InetAddress iaddr)
Parameters : 
iaddr : InetAddress of the recipient
  1. setPort() :设置目的地将接收此数据包的端口。
Syntax :public void setPort(int iport)
Parameters : 
iport : the port number
  1. setSocketAddress() :用于设置目的的socket地址(IP地址+端口号)。
Syntax : public void setSocketAddress(SocketAddress address)
Parameters :
address : socket address
  1. getSocketAddress() :返回此数据包的套接字地址。如果收到,则返回主机的套接字地址。
Syntax : public SocketAddress getSocketAddress()
  1. setLength() :用于设置此数据包的长度。
Syntax :public void setLength(int length)
Parameters :
length : length of the packet

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


输出 :

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