NetAssist.exe 网络调试助手
TCP
import com.jkinvest.constant.ConstantValue; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.codec.string.StringDecoder; import io.netty.handler.codec.string.StringEncoder; import io.netty.handler.timeout.IdleStateHandler; import io.netty.util.ResourceLeakDetector; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.concurrent.TimeUnit; public class TcpTest { public static void main(String[] args) { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap serverBootStrap = new ServerBootstrap(); serverBootStrap.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .option(ChannelOption.SO_BACKLOG, 1024) .childHandler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel socketChannel) throws Exception { socketChannel.pipeline().addLast(new IdleStateHandler(10, 0, 0, TimeUnit.SECONDS)); socketChannel.pipeline().addLast(new TcpServerHandler()); //编码格式 socketChannel.pipeline().addLast(new StringEncoder(Charset.forName("GBK"))); //解码格式 socketChannel.pipeline().addLast(new StringDecoder(StandardCharsets.UTF_8)); } }); ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.ADVANCED); ChannelFuture f = serverBootStrap.bind(ConstantValue.PORT).sync(); System.out.println("tcp服务器正在监听......"); f.channel().closeFuture().sync(); } catch (InterruptedException e) { e.printStackTrace(); } finally { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } }
import com.jkinvest.utils.ByteUtil; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; import io.netty.util.ReferenceCountUtil; public class TcpServerHandler extends ChannelHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { ByteBuf in = (ByteBuf) msg; byte[] req = new byte[in.readableBytes()]; try { in.readBytes(req); } finally { ReferenceCountUtil.release(msg); } String body = ByteUtil.BinaryToHexString(req); System.out.println("body:" + body); } }
UDP
import com.jkinvest.constant.ConstantValue; import io.netty.bootstrap.Bootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioDatagramChannel; import io.netty.handler.codec.string.StringDecoder; import io.netty.handler.codec.string.StringEncoder; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; public class UdpTest { 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 ChannelInitializer<NioDatagramChannel>() { @Override protected void initChannel(NioDatagramChannel ch) throws Exception { ch.pipeline().addLast(new UdpServerHandler()); ch.pipeline().addLast(new StringEncoder(Charset.forName("GBK"))); ch.pipeline().addLast(new StringDecoder(StandardCharsets.UTF_8)); } } ); ChannelFuture f = bootstrap.bind(ConstantValue.PORT).sync(); System.out.println("UDP服务器正在监听......"); f.channel().closeFuture().sync(); } catch (InterruptedException e) { e.printStackTrace(); } finally { group.shutdownGracefully(); } } }
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.socket.DatagramPacket; /** * @author zfang * @date 2020/11/10 */ public class UdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket> { @Override protected void messageReceived(ChannelHandlerContext ctx, DatagramPacket msg) throws Exception { System.out.println("====="); } }
UDP Client
import io.netty.bootstrap.Bootstrap; import io.netty.buffer.Unpooled; 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.DatagramPacket; import io.netty.channel.socket.nio.NioDatagramChannel; import io.netty.util.CharsetUtil; import java.net.InetSocketAddress; public class ChineseProverbClient { public void run(int port) { EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); Bootstrap bootstrap = new Bootstrap(); try { bootstrap.group(eventLoopGroup).channel(NioDatagramChannel.class) .option(ChannelOption.SO_BROADCAST, true) .handler(new ChineseProverbClientHandler()); Channel channel = bootstrap.bind(7070).sync().channel(); channel.writeAndFlush(new DatagramPacket(Unpooled.copiedBuffer("QUERY", CharsetUtil.UTF_8), new InetSocketAddress("10.20.30.43", port))).sync(); if (!channel.closeFuture().await(15000)) { System.out.println("out of time"); } } catch (InterruptedException e) { e.printStackTrace(); } finally { eventLoopGroup.shutdownGracefully(); } } public static void main(String[] args) { new ChineseProverbClient().run(3888); } }
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.socket.DatagramPacket; import io.netty.util.CharsetUtil; public class ChineseProverbClientHandler extends SimpleChannelInboundHandler<DatagramPacket> { @Override protected void messageReceived(ChannelHandlerContext channelHandlerContext, DatagramPacket datagramPacket) throws Exception { String result = datagramPacket.content().toString(CharsetUtil.UTF_8); System.out.println("client>>>" + result); channelHandlerContext.close(); } }