不废话直接上源码,为了更好的理解我分了服务端和客户端(实际上UDP是不分的)
服务端
import java.net.*;//网络类
import java.util.*;//工具类
public class UDPServer {
private static DatagramSocket server;
private static int port = 1024;//监听的端口
public static void main(String[] args) {
try {
server = new DatagramSocket(port);
//数据接收缓冲
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
System.out.println("监听端口" + port + "成功, 等待数据接收...");
while (true) {
//阻塞接收数据
server.receive(packet);
//字节数据转文本
String data = new String(packet.getData(), 0, packet.getLength());
//客户端数据
ArrayList<Object> client = new ArrayList<Object>();
client.add(packet.getAddress());
client.add(packet.getPort());
receive(client, data);
}
} catch (Exception e) {
System.out.println("监听端口" + port + "错误, 可能原因: \n1.端口被占用\n2.逻辑有问题\n3.监听小于1024的保护端口");
}
}
//接收数据回调
public static void receive(ArrayList client, String data) {
/*System.out.println("接收到: " + data);
send(client, data);*/
}
//发送数据
public static void send(ArrayList client, String data) {
try {
DatagramPacket packet = new DatagramPacket(data.getBytes(), data.getBytes().length, (InetAddress)client.get(0), (int)client.get(1));
server.send(packet);
} catch (Exception e) {
System.out.println("发送数据错误");
}
}
}
客户端
import java.net.*;//网络类
public class UDPClient {
private static DatagramSocket client;
private static String ip = "localhost";//服务器IP
private static int port = 1024;//服务器端口
public static void main(String[] args) {
try {
client = new DatagramSocket();
//数据接收缓冲
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
while (true) {
//阻塞接收数据
client.receive(packet);
//字节数据转文本
String data = new String(packet.getData(), 0, packet.getLength());
receive(data);
}
} catch (Exception e) {
System.out.println("发生错误");
}
}
//接收数据回调
public static void receive(String data) {
//System.out.println(data);
}
//发送数据
public static void send(String data) {
try {
DatagramPacket packet = new DatagramPacket(data.getBytes(), data.getBytes().length, InetAddress.getByName(ip), port);
client.send(packet);
} catch (Exception e) {
System.out.println("发送数据错误");
}
}
}