From 966f996b2169bf9e8e7fff5242081b9286519959 Mon Sep 17 00:00:00 2001 From: chenhao <852066789@qq.com> Date: Thu, 11 Sep 2025 14:22:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(nex-be):=20=E6=B7=BB=E5=8A=A0=20UDP?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现了一个监听 --- .../unisinsight/project/udp/UDPServer.java | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 nex-be/src/main/java/com/unisinsight/project/udp/UDPServer.java diff --git a/nex-be/src/main/java/com/unisinsight/project/udp/UDPServer.java b/nex-be/src/main/java/com/unisinsight/project/udp/UDPServer.java new file mode 100644 index 0000000..c4c8b4a --- /dev/null +++ b/nex-be/src/main/java/com/unisinsight/project/udp/UDPServer.java @@ -0,0 +1,93 @@ +package com.unisinsight.project.udp; + +import cn.hutool.extra.spring.SpringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.SocketException; +import java.net.UnknownHostException; + +@Component +public class UDPServer { + + private static final Logger logger = LoggerFactory.getLogger(UDPServer.class); + + private static final int PORT = 8115; + + private DatagramSocket socket; + private Thread serverThread; + private volatile boolean running = false; + + @PostConstruct + public void start() { + try { + socket = new DatagramSocket(PORT); + running = true; + + serverThread = new Thread(() -> { + byte[] buffer = new byte[1024]; + + while (running) { + try { + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + socket.receive(packet); + + // 处理接收到的数据 + handlePacket(packet); + } catch (IOException e) { + if (running) { + logger.error("UDP服务器接收数据时发生错误", e); + } + } + } + }); + + serverThread.start(); + logger.info("UDP服务器已启动,监听端口: {}", PORT); + } catch (SocketException e) { + logger.error("UDP服务器启动失败,端口: {}", PORT, e); + } + } + + private void handlePacket(DatagramPacket packet) { + try { + // 获取客户端地址和端口 + InetAddress clientAddress = packet.getAddress(); + int clientPort = packet.getPort(); + + // 获取主机IP地址 + String hostIP = InetAddress.getLocalHost().getHostAddress(); + String serverPort = SpringUtil.getProperty("server.port"); + // 将主机IP地址发送回客户端 + byte[] responseData = hostIP.getBytes(); + DatagramPacket responsePacket = new DatagramPacket(responseData, responseData.length, clientAddress, clientPort); + socket.send(responsePacket); + + + logger.info("已向客户端 {}/{} 返回主机IP地址: {}:{}", clientAddress.getHostAddress(), clientPort, hostIP, serverPort); + } catch (UnknownHostException e) { + logger.error("无法获取本机IP地址", e); + } catch (IOException e) { + logger.error("向客户端发送数据时发生错误", e); + } + } + + @PreDestroy + public void stop() { + running = false; + if (socket != null && !socket.isClosed()) { + socket.close(); + } + if (serverThread != null) { + serverThread.interrupt(); + } + logger.info("UDP服务器已停止"); + } +} \ No newline at end of file