一、发送端/接收端
UDP一般用于安全性要求不高的端对端传输模型的应用程序,它们都会存在两个终端。两端的编程方式类似,基本编程步骤如下:
(1)创建数据Socket,指定一个端口号。Java提供了java.net.DatagramSocket类来支持这一步,两端可以使用不同的端口号,代码如下:
DatagramSocket ds = new DatagramSocket(9999);
(2)对于接收消息的一端来说,提供一个byte数组进行数据的存储,而对于发送消息的一端除此以外还需要提供对端的IP地址和端口号,代码如下:
byte[] buff = new byte[1024];//创建一个byte数组
DatagramPacket dp = new DatagramPacket(buff, 1024);//长度小于等于buff的长度
//或者
String str = "数据";
DatagramPacket dp = new Datagrampacket(str.getBytes(), 0, str.length(), InetAddress.getByName("localhost"), 9999);
(3)调用DatagramPacket的receive()或send()方法进行数据的接收或发送,代码如下:
ds.receive(DatagramPacket对象);
//或者
ds.send(DatagramPacket对象);
(4)调用DatagramPacket的getData()方法得到byte数组的数据
dp.getData();//如果缓存的byte数组长度与接收的数据长度不统一则需要用某些方法进行数据切分存储
(5)释放资源。关闭DatagramSocket对象,代码如下:
dp.close();
二、UDP编程示例
发送端发送数据,接收端接收数据
public class UDPServer01 {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(9999);//创建DatagramSocket指定闆
byte[] buff = new byte[1024];//创建byte数组
DatagramPacket dp = new DatagramPacket(buff, 1024);//创建数据包对象
ds.receive(dp);//接收消息
String str = new String(dp.getData(), 0, dp.getLength());//得到数据
System.out.println(str);
ds.close();//关闭DatagramSocket
}
}
public class UDPClient01 {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(9998);
String str = "abc";
DatagramPacket dp = new DatagramPacket(str.getBytes(), 0, str.length(),
InetAddress.getByName("localhost"), 9999);
ds.send(dp);//发送数据
ds.close();//关闭DatagramSocket
}
}