先上客户端代码
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。