先上客户端代码
package com.test.net; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPClient { /** *UDP客户端 */ public static void main(String[] args) throws Exception { DatagramSocket socket=new DatagramSocket(); String str="hello"; byte[] buf=str.getBytes(); DatagramPacket packet=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),1111); /*直接发包*/ socket.send(packet); } }
服务器端代码
package com.test.net; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class UDPServer { /** *UDP服务器 */ public static void main(String[] args) throws Exception { DatagramSocket socket=new DatagramSocket(1111); byte[] buf=new byte[256]; DatagramPacket packet=new DatagramPacket(buf,buf.length); /*监听,阻塞*/ socket.receive(packet); String received=new String(packet.getData()); System.out.println(received); } }
首先在这里先讲解一下UDP,UDP协议是无连接协议,简单来说,就是单向发送,不需要事先建立连接,也不需要回包。所以,只需要一个IP和端口,UDP就可以朝着这个端口发包,至于有没有这个IP和端口,或者对方接收不接收,UDP就不管了。所以在UDP中最关键的就是两个类,一个是DatagramSocket,另外一个就是DatagramPacket,第一个类似于套接字,第二个就是UDP包。
在服务器中,DatagramPacket的receive方法会阻塞,相当于监听,一直到监听到数据报为止。
输出结果
结果就是服务器端输出了hello。
时间: 2024-09-30 18:45:42