User DatagramSocket Protocol 的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,以及到达目的地时间以及内容的正确性都是不能保证的,每个传输的数据报必须限定在64KB之内。
主要使用下面两个类:
DatagramPacket:此类表示数据报包
DataPramSocket :此类用来表示发送和接收数据包的套接字。
UDP协议中不存在服务器端客户端,因为其并没有建立真正的连接。
发送端:
发送过程:
1:将要发送的数据报打包
2:创建UDP的socket对象
3:发送数据。
代码如下:
public class UDPService {
public static void main(String[] args) throws IOException {
String info = "hello client I am from UDPService ";
//把要发送的数据转换成字节数组
byte []bytes = info.getBytes();
// 数据报打包
try {
DatagramPacket data = new DatagramPacket(bytes, 0, bytes.length, InetAddress.getByName("localhost"),8000);
//创建一个UDPSocket对象
DatagramSocket datagramSocket = new DatagramSocket(3000);//表示我自己的端口号(如果另一个端口想要发送数据必须写这个端口号)
datagramSocket.send(data);//发送数据报
System.out.println("发送完毕");
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
接收端:
接收端与发送端的过程刚好相反。
public class UDPClient {
public static void main(String[] args) throws IOException {
byte bytes []= new byte [1024];
//创建数据报包
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
//创建UDP协议的Socket对象
DatagramSocket socket = new DatagramSocket(8000);
socket.receive(dp);//接收数据会造成堵塞
String info =(new String ( dp.getData(),0,dp.getLength()));
System.out.println(info);
socket.close();
}
}