HelloWorld客户端通向服务器端发送消息服务器端读取数据你好并且返回new Date()客户端读取数据pomdependency groupIdio.netty/groupId artifactIdnetty-all/artifactId version5.0.0.Alpha1/version /dependencyTimeServerHandler服务器端读取数据并且回应请求继承ChannelHandlerAdapter并且实现channelRead和exceptionCaught方法package myhelloworld; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; import java.util.Date; /** * author CBeann * create 2019-08-27 18:31 */ public class TimeServerHandler extends ChannelHandlerAdapter { Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { //服务器读客户端发送来的数据 ByteBuf buf (ByteBuf) msg; byte[] req new byte[buf.readableBytes()]; buf.readBytes(req); String body new String(req, UTF-8); System.out.println(The TimeServer receive : body); //服务器向客户端回应请求 ByteBuf response Unpooled.copiedBuffer(new Date().toString().getBytes()); ctx.writeAndFlush(response); } Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { ctx.close(); } // }TimeServerpackage myhelloworld; 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; /** * author CBeann * create 2019-08-27 18:22 */ public class TimeServer { public static void main(String[] args) throws Exception { int port 8080; //配置服务器端的NIO线程组 EventLoopGroup bossGroup new NioEventLoopGroup(); EventLoopGroup workerGroup new NioEventLoopGroup(); try { ServerBootstrap b new ServerBootstrap(); b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .option(ChannelOption.SO_BACKLOG, 1024) .childHandler(new ChannelInitializerSocketChannel() { Override protected void initChannel(SocketChannel socketChannel) throws Exception { //TimeClientHandler是自己定义的方法 socketChannel.pipeline().addLast(new TimeServerHandler()); } }); //绑定端口 ChannelFuture f b.bind(port).sync(); //等待服务端监听端口关闭 f.channel().closeFuture().sync(); } catch (Exception e) { } finally { //优雅关闭释放线程池资源 bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } }启动NettyServer的模版代码private void bing(int port) { EventLoopGroup parentGroup new NioEventLoopGroup(); EventLoopGroup childGroup new NioEventLoopGroup(); try { ServerBootstrap b new ServerBootstrap(); b.group(parentGroup, childGroup) .channel(NioServerSocketChannel.class) //非阻塞模式 .option(ChannelOption.SO_BACKLOG, 128) .childHandler(new MyChannelInitializer()); ChannelFuture f b.bind(port).sync(); System.out.println(itstack-demo-netty server start done. {关注公众号bugstack虫洞栈获取源码}); f.channel().closeFuture().sync(); } catch (InterruptedException e) { e.printStackTrace(); } finally { childGroup.shutdownGracefully(); parentGroup.shutdownGracefully(); } }TimeClientHandler客户端读取服务器响应数据继承ChannelHandlerAdapter并且实现channelRead和exceptionCaught方法package myhelloworld; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; import io.netty.util.ReferenceCountUtil; /** * author CBeann * create 2019-08-27 18:47 */ public class TimeClientHandler extends ChannelHandlerAdapter { //客户端读取服务器发送的数据 Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { try { ByteBuf buf (ByteBuf) msg; byte[] req new byte[buf.readableBytes()]; buf.readBytes(req); String body new String(req, UTF-8); System.out.println(Now is: body); } catch (Exception e) { } finally { //标配 ReferenceCountUtil.release(msg); } } Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { ctx.close(); } }TimeClientpackage myhelloworld; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.Unpooled; 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.NioSocketChannel; /** * author CBeann * create 2019-08-27 18:43 */ public class TimeClient { public static void main(String[] args) throws Exception { int port 8080; String host 127.0.0.1; //配置客户端NIO线程组 EventLoopGroup group new NioEventLoopGroup(); try { Bootstrap b new Bootstrap(); b.group(group) .channel(NioSocketChannel.class) .handler(new ChannelInitializerSocketChannel() { Override protected void initChannel(SocketChannel socketChannel) throws Exception { //TimeClientHandler是自己定义的方法 socketChannel.pipeline().addLast(new TimeClientHandler()); } }); //发起异步连接操作 ChannelFuture f b.connect(host, port).sync(); //发送数据 f.channel().writeAndFlush(Unpooled.copiedBuffer(您好.getBytes())); //Thread.sleep(1000);//防止TCP粘包 //f.channel().writeAndFlush(Unpooled.copiedBuffer(您好.getBytes())); //Thread.sleep(1000); //f.channel().writeAndFlush(Unpooled.copiedBuffer(您好.getBytes())); //Thread.sleep(1000); //等待客户端链路关闭 f.channel().closeFuture().sync(); } catch (Exception e) { } finally { //优雅关闭 group.shutdownGracefully(); } } }学习总结1自己敲一遍因为不确定你查询到的博客是对还是错的2很多地方都是固定格式需要修改的地方就那么几个2.1option(ChannelOption.SO_BACKLOG, 1024) 修改一些参数2.2socketChannel.pipeline().addLast(new TimeServerHandler())添加一些自己定义或者系统的handler2.3自己定义的handler3请坚持