UDP通信原理
UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象。因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
Java提供了DatagramSocket类作为基于UDP协议的Socket
UDP发送数据
发送数据的步骤
-
创建发送端的Socket对象(DatagramSocket)
-
创建数据,并把数据打包
-
调用DatagramSocket对象的方法发送数据
-
关闭发送端
public class SendDemo { public static void main(String[] args) throws Exception { //创建发送端Socket对象(DatagramSocket) //DatagramSocket() 构造数据报套接字并将其绑定到本地主机上的任何可用端口 DatagramSocket ds = new DatagramSocket(); //创建数据,并把数据打包 //DatagramPacket(byte[] buf,int length,InetAddress address,int port) //构造一个数据包,发送长度为length的数据包到指定主机上的指定端口号 byte[] bys = "hello,udp".getBytes(StandardCharsets.UTF_8); int length = bys.length; InetAddress address = InetAddress.getByName("192.168.1.66"); int port = 10086; DatagramPacket dp = new DatagramPacket(bys, length, address, port); //调用DatagramSocket对象的方法发送数据 //void send(DatagramPacket p)从此套接字发送数据报 ds.send(dp); //关闭发送端 ds.close(); } }
UDP接收数据
接收数据的步骤
-
创建接收端的Socket对象(DatagramSocket)
-
创建数据包用于接收数据
-
调用DatagramSocket对象的方法接收数据
-
解析数据包,并把数据在控制台显示
-
关闭接收端
public class ReceiveDemo { public static void main(String[] args) throws IOException { //创建接收端Socket对象(DatagramSocket) DatagramSocket ds = new DatagramSocket(10086); //创建数据包用于接收数据 byte[] bys = new byte[1024]; DatagramPacket dp = new DatagramPacket(bys, bys.length); //调用DatagramSocket对象的方法接收数据 ds.receive(dp); //解析数据包,并把数据在控制台显示 byte[] datas = dp.getData(); String dataString = new String(datas); System.out.println(dataString); ds.close(); } }