在java中如何使用udp,下面一个例子进行演示,关键: DatagramSocket、DatagramPacket
服务端
package com.luoq.udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.nio.charset.StandardCharsets;
public class UDPServer {
private static final int MAX_SIZE = 1024;
private static final int PORT = 8080;
public static void main(String[] args) {
DatagramSocket socket = null;
try {
socket = new DatagramSocket(PORT);
System.out.println("UDP 服务端启动..");
int index = 0;
while (true) {
index++;
byte[] buffer = new byte[MAX_SIZE];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
// 一直阻塞,直到有客户端的数据发送过来
socket.receive(packet);
// 客户端发送的数据
byte[] dataBytes = packet.getData();
String data = new String(dataBytes, 0, packet.getLength(), StandardCharsets.UTF_8);
System.out.println("服务端收到数据: 【" + data+"】");
// 回执数据
byte[] send = ("ok, 这是我第 " + index + " 次收到你的数据了。").getBytes(StandardCharsets.UTF_8);
packet.setData(send);
socket.send(packet);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
socket.close();
}
}
}
客户端
package com.luoq.udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;
import java.time.LocalTime;
public class UDPClient {
public static void main(String[] args) {
DatagramSocket socket = null;
try {
socket = new DatagramSocket(10000);
byte[] data = (LocalTime.now() + ", hello, 我在测试udp! ").getBytes(StandardCharsets.UTF_8);
int port = 8080;
InetAddress address = InetAddress.getByName("127.0.0.1");
DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
socket.send(packet);
byte[] buffer = new byte[1024];
DatagramPacket receiver = new DatagramPacket(buffer, buffer.length);
socket.receive(receiver);
String res = new String(receiver.getData(), 0, receiver.getLength(), StandardCharsets.UTF_8);
System.out.println("客户端收到服务端的回执数据: 【" + res + "】");
} catch (Exception e) {
e.printStackTrace();
} finally {
socket.close();
}
}
}