UDP 客戶端(DatagramSocket + DatagramPacket)
public class UdpClient {
public static void main(String[] args) {
try (DatagramSocket datagramSocket = new DatagramSocket()) {
InetAddress inetAddress = InetAddress.getByName("localhost");
datagramSocket.connect(inetAddress, 8777);
byte[] bytes = "this is first message".getBytes("UTF-8");
DatagramPacket request = new DatagramPacket(bytes, bytes.length);
byte[] bytes1 = "this is second message...........".getBytes("UTF-8");
DatagramPacket response = new DatagramPacket(new byte[1024], 1024);
datagramSocket.send(request);
request.setData(bytes1);
request.setLength(bytes1.length);
datagramSocket.send(request);
datagramSocket.receive(response);
System.out.println(new String(response.getData(), 0, response.getLength(), "UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
UDP 服務端
public class UdpServer {
public static void main(String[] args) {
try (DatagramSocket datagramSocket = new DatagramSocket(8777)) {
DatagramPacket request = new DatagramPacket(new byte[1024], 1024);
while (true) {
datagramSocket.receive(request);
System.out.println(request.getLength());
System.out.println(request.getSocketAddress());
System.out.println(request.getAddress() + ":" + request.getPort());
System.out.println(new String(request.getData(), 0, request.getLength(), "UTF-8"));
byte[] bytes = "你好,我是服務器".getBytes("UTF-8");
DatagramPacket response = new DatagramPacket(bytes, bytes.length, request.getAddress(), request.getPort());
datagramSocket.send(response);
// JDK 1.8 中無需重設 length,bufferLength 保證緩衝區大小
}
} catch (Exception e) {
e.printStackTrace();
}
}
}