UDP客户端
package com.msb.test09;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class UDPClient {
private DatagramSocket socket = null;
private String serverIp;
private int serverPort;
// 构造方法,初始化服务器的 IP 和端口
public UDPClient(String ip, int port) throws SocketException {
serverIp = ip;
serverPort = port;
// 创建 UDP Socket
socket = new DatagramSocket();
}
// 启动客户端
public void start() {
try (Scanner scanner = new Scanner(System.in)) {
System.out.println("客户端启动!");
while (true) {
System.out.print("-> ");
String request = scanner.nextLine();
// 发送请求
DatagramPacket requestPacket = new DatagramPacket(request.getBytes(), request.getBytes().length,
InetAddress.getByName(serverIp), serverPort);
socket.send(requestPacket);
// 接收响应
DatagramPacket responsePacket = new DatagramPacket(new byte[4096], 4096);
socket.receive(responsePacket);
String response = new String(responsePacket.getData(), 0, responsePacket.getLength());
// 显示响应
System.out.println(response);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭 socket
if (socket != null && !socket.isClosed()) {
socket.close();
}
}
}
public static void main(String[] args) throws IOException {
// 创建 UDPClient 对象并启动客户端
UDPClient client = new UDPClient("127.0.0.1", 9090);
client.start();
}
}
UDP服务端
package com.msb.test09;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDPServer {
private DatagramSocket socket = null;
// 构造方法,初始化服务器要绑定的端口
public UDPServer(int port) throws SocketException {
socket = new DatagramSocket(port);
}
// 启动服务器
public void start() throws IOException {
System.out.println("服务器启动!");
while (true) {
// 读取请求
DatagramPacket requestPacket = new DatagramPacket(new byte[4096], 4096);
socket.receive(requestPacket);
String request = new String(requestPacket.getData(), 0, requestPacket.getLength());
// 计算响应
String response = process(request);
// 发送响应
DatagramPacket responsePacket = new DatagramPacket(response.getBytes(), response.getBytes().length,
requestPacket.getSocketAddress());
socket.send(responsePacket);
// 记录日志
System.out.printf("[%s:%d] req: %s, resp: %s\n", requestPacket.getAddress().toString(),
requestPacket.getPort(), request, response);
}
}
// 处理请求并计算响应
public String process(String request) {
return request;
}
public static void main(String[] args) {
try {
// 创建 UDPServer 对象并启动服务器
UDPServer server = new UDPServer(9090);
server.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}