From 150c69d37c616ee66e4e0a72bc1981d5e4a4c17c Mon Sep 17 00:00:00 2001 From: aoshiguchen <1052045476@qq.com> Date: Sun, 23 Nov 2025 13:06:30 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E9=80=9A=E8=BF=87mc=E5=9F=BA?= =?UTF-8?q?=E5=B2=A9=20udp=E4=BB=A3=E7=90=86=EF=BC=8C=E5=90=8C=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E4=BB=A3=E7=90=86=E7=AB=AF=E5=8F=A3=E5=8F=AA=E8=83=BD?= =?UTF-8?q?=E6=9C=89=E4=B8=80=E4=B8=AA=E4=BA=BA=E8=BF=9E=E6=8E=A5=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../proxy/core/ProxyTunnelChannelHandler.java | 7 +++ .../proxy/core/UdpVisitorChannelHandler.java | 19 +++++--- .../UdpProxyMessageConnectHandler.java | 4 +- .../UdpProxyMessageTransferHandler.java | 44 +++++++++---------- .../neutrinoproxy/server/util/ProxyUtil.java | 43 ++++++++++++++++++ 5 files changed, 87 insertions(+), 30 deletions(-) diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/core/ProxyTunnelChannelHandler.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/core/ProxyTunnelChannelHandler.java index d1b44022..d3de5ef8 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/core/ProxyTunnelChannelHandler.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/core/ProxyTunnelChannelHandler.java @@ -59,6 +59,13 @@ public class ProxyTunnelChannelHandler extends SimpleChannelInboundHandler { - Channel proxyChannel = channel.attr(Constants.NEXT_CHANNEL).get(); + String visitorId = ProxyUtil.getVisitorIdBySocketAddress(datagramPacket.sender()); + if (StrUtil.isBlank(visitorId)) { + return; + } + Channel proxyChannel = ProxyUtil.getTunnelChannelByVisitorId(visitorId); +// Channel proxyChannel = channel.attr(Constants.NEXT_CHANNEL).get(); if (null == proxyChannel) { // // 该端口还没有代理客户端 @@ -50,7 +55,6 @@ public class UdpVisitorChannelHandler extends SimpleChannelInboundHandler licenseIdToClientIdMap = new HashMap<>(); + /** + * visitorId - SocketAddress映射 + */ + private static Map visitorIdToSocketAddressMap = new HashMap<>(); + /** + * SocketAddress - visitorId 映射 + */ + private static Map socketAddressToVisitorIdMap = new HashMap<>(); + /** + * visitorId - tunnelChannel 映射 + */ + private static Map visitorIdToTunnelChannelMap = new HashMap<>(); /** * 初始化代理信息 @@ -479,4 +492,34 @@ public class ProxyUtil { public static void removeClientIdByLicenseId(Integer licenseId) { licenseIdToClientIdMap.remove(licenseId); } + + public static void setVisitorIdToSocketAddressMap(String visitorId, SocketAddress socketAddress) { + visitorIdToSocketAddressMap.put(visitorId, socketAddress); + socketAddressToVisitorIdMap.put(socketAddress, visitorId); + } + + public static SocketAddress getSocketAddressByVisitorId(String visitorId) { + return visitorIdToSocketAddressMap.get(visitorId); + } + + public static void removeSocketAddressByVisitorId(String visitorId) { + SocketAddress socketAddress = visitorIdToSocketAddressMap.get(visitorId); + visitorIdToSocketAddressMap.remove(visitorId); + socketAddressToVisitorIdMap.remove(socketAddress); + + visitorIdToTunnelChannelMap.remove(visitorId); + } + + public static String getVisitorIdBySocketAddress(SocketAddress socketAddress) { + return socketAddressToVisitorIdMap.get(socketAddress); + } + + public static void setVisitorIdToTunnelChannelMap(String visitorId, Channel tunnelChannel) { + visitorIdToTunnelChannelMap.put(visitorId, tunnelChannel); + } + + public static Channel getTunnelChannelByVisitorId(String visitorId) { + return visitorIdToTunnelChannelMap.get(visitorId); + } + }