Răsfoiți Sursa

feat: 新增UDP代理

马大波 1 an în urmă
părinte
comite
9b199e1e86

+ 2 - 2
src/main/java/com/xiaobao/gateway/protocol/proxy/forward/ForwardProxyServer.java

@@ -38,12 +38,12 @@ public class ForwardProxyServer {
                         ServerBootstrap b = new ServerBootstrap();
                         b.group(bossGroup, workerGroup)
                             .channel(NioServerSocketChannel.class)
-                            .handler(new LoggingHandler(LogLevel.INFO))
+                            // .handler(new LoggingHandler(LogLevel.INFO))
                             .childHandler(new ChannelInitializer<SocketChannel>() {
                                 @Override
                                 public void initChannel(SocketChannel ch) {
                                     ChannelPipeline pipeline = ch.pipeline();
-                                    pipeline.addLast(new LoggingHandler(LogLevel.INFO));
+                                    // pipeline.addLast(new LoggingHandler(LogLevel.INFO));
                                     pipeline.addLast(new ForwardProxyServerInHandler(reverseHost, reversePort, server));
                                 }
                             })

+ 2 - 2
src/main/java/com/xiaobao/gateway/protocol/proxy/reverse/ReverseProxyServer.java

@@ -32,12 +32,12 @@ public class ReverseProxyServer {
                 ServerBootstrap b = new ServerBootstrap();
                 b.group(bossGroup, workerGroup)
                     .channel(NioServerSocketChannel.class)
-                    .handler(new LoggingHandler(LogLevel.INFO))
+                    // .handler(new LoggingHandler(LogLevel.INFO))
                     .childHandler(new ChannelInitializer<SocketChannel>() {
                         @Override
                         public void initChannel(SocketChannel ch) {
                             ChannelPipeline pipeline = ch.pipeline();
-                            pipeline.addLast(new LoggingHandler(LogLevel.INFO));
+                            // pipeline.addLast(new LoggingHandler(LogLevel.INFO));
                             pipeline.addLast(new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 4, 2, 0));
                             pipeline.addLast(new ReverseProxyServerInHandler(serverList));
                         }

+ 42 - 0
src/main/java/com/xiaobao/gateway/protocol/udp/ClientProxyHandler.java

@@ -0,0 +1,42 @@
+package com.xiaobao.gateway.protocol.udp;
+
+import io.netty.buffer.Unpooled;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+import io.netty.channel.socket.DatagramPacket;
+import io.netty.util.CharsetUtil;
+
+import java.net.InetSocketAddress;
+
+public class ClientProxyHandler extends SimpleChannelInboundHandler<DatagramPacket> {
+    @Override
+    protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket packet) throws Exception {
+        String msg = packet.content().toString(CharsetUtil.UTF_8);
+        System.out.println("Received data from client: " + msg);
+        InetSocketAddress client = packet.sender();
+        String newMsg = System.currentTimeMillis() + "\n";
+        DatagramPacket responsePacket = new DatagramPacket(Unpooled.copiedBuffer(newMsg.getBytes(CharsetUtil.UTF_8)), client);
+        ctx.writeAndFlush(responsePacket).addListener((future) -> {
+            if (future.isSuccess()) {
+                System.out.println("回写客户端成功");
+            } else {
+                System.out.println("回写客户端失败");
+            }
+        });
+        if (msg.startsWith("close")) {
+            ctx.channel().close();
+        }
+    }
+
+    @Override
+    public void channelActive(ChannelHandlerContext ctx) throws Exception {
+        System.out.println("Client connected");
+        super.channelActive(ctx);
+    }
+
+    @Override
+    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+        System.out.println("Client disconnected");
+        super.channelInactive(ctx);
+    }
+}

+ 30 - 0
src/main/java/com/xiaobao/gateway/protocol/udp/UDPEchoServer.java

@@ -0,0 +1,30 @@
+package com.xiaobao.gateway.protocol.udp;
+
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioDatagramChannel;
+
+public class UDPEchoServer {
+    static final int PORT = Integer.parseInt(System.getProperty("port", "8006"));
+
+    public static void main(String[] args) {
+        EventLoopGroup group = new NioEventLoopGroup();
+        try {
+            Bootstrap bootstrap = new Bootstrap();
+            bootstrap
+                .group(group)
+                .channel(NioDatagramChannel.class)
+                .option(ChannelOption.SO_BROADCAST, true)
+                .handler(new ClientProxyHandler());
+            Channel channel = bootstrap.bind(PORT).sync().channel();
+            channel.closeFuture().sync();
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        } finally {
+            group.shutdownGracefully();
+        }
+    }
+}