博客
关于我
netty服务器,客户端初体验
阅读量:174 次
发布时间:2019-02-28

本文共 4130 字,大约阅读时间需要 13 分钟。

一、引入依赖

在项目中首先需要配置所需的依赖包。Netty作为依赖包需要手动添加,建议访问Maven仓库获取最新版本。以下是常用的依赖配置:

io.netty
netty-all
4.1.25.Final
org.projectlombok
lombok
1.16.22

二、服务器端实现

完成依赖配置后,接下来编写服务器端代码。以下是一个简单的Netty服务器实现:

public class LiuServer {    private final int port;    public LiuServer(int port) {        this.port = port;    }    public static void main(String[] args) throws Exception {        int port = 8888;        new LiuServer(port).start();    }    public void start() throws Exception {        EventLoopGroup bossGroup = new NioEventLoopGroup(1);        EventLoopGroup workerGroup = new NioEventLoopGroup();        try {            ServerBootstrap b = new ServerBootstrap();            b.group(bossGroup, workerGroup)                    .channel(NioServerSocketChannel.class)                    .localAddress(new InetSocketAddress(port))                    .childHandler(new ChannelInitializer
() { @Override public void initChannel(SocketChannel ch) { ch.pipeline().addLast(new LiuServerHandler()); } }); ChannelFuture f = b.bind().sync(); System.out.println(LiuServer.class.getName() + " 服务启动开始监听端口:" + f.channel().localAddress()); f.channel().closeFuture().sync(); } finally { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } }}//服务器处理类@ChannelHandler.Sharablepublic class LiuServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { ByteBuf in = (ByteBuf) msg; System.out.println("客户端发来消息: " + in.toString(CharsetUtil.UTF_8)); ctx.write(in); } @Override public void channelReadComplete(ChannelHandlerContext ctx) { System.out.println("channel 通道读取完成"); ctx.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { cause.printStackTrace(); ctx.close(); }}

三、客户端实现

客户端需要连接到服务器,以下是一个简单的Netty客户端实现:

public class LiuClient {    private final String host;    private final int port;    public LiuClient(String host, int port) {        this.host = host;        this.port = port;    }    public static void main(String[] args) throws Exception {        final String host = "127.0.0.1";        final int port = 8888;        new LiuClient(host, port).start();    }    public void start() throws Exception {        EventLoopGroup group = new NioEventLoopGroup();        try {            Bootstrap b = new Bootstrap();            b.group(group)                    .channel(NioSocketChannel.class)                    .remoteAddress(new InetSocketAddress(host, port))                    .handler(new ChannelInitializer
() { @Override public void initChannel(SocketChannel ch) { ch.pipeline().addLast(new LiuClientHandler()); } }); ChannelFuture f = b.connect().sync(); f.channel().closeFuture().sync(); } finally { group.shutdownGracefully(); } }}//客户端处理类@ChannelHandler.Sharablepublic class LiuClientHandler extends SimpleChannelInboundHandler
{ @Override public void channelActive(ChannelHandlerContext ctx) { ctx.writeAndFlush(Unpooled.copiedBuffer("Hello Netty! " + Long.toString(System.currentTimeMillis()), CharsetUtil.UTF_8)); } @Override public void channelRead0(ChannelHandlerContext ctx, ByteBuf in) { System.out.println("服务器发来消息: " + in.toString(CharsetUtil.UTF_8)); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { cause.printStackTrace(); ctx.close(); }}

以上代码提供了一个完整的Netty服务器端和客户端实现,适用于基础的网络通信应用开发。

转载地址:http://mton.baihongyu.com/

你可能感兴趣的文章
node不是内部命令时配置node环境变量
查看>>
node中fs模块之文件操作
查看>>
Node中同步与异步的方式读取文件
查看>>
node中的get请求和post请求的不同操作【node学习第五篇】
查看>>
Node中的Http模块和Url模块的使用
查看>>
Node中自启动工具supervisor的使用
查看>>
Node入门之创建第一个HelloNode
查看>>
node全局对象 文件系统
查看>>
Node出错导致运行崩溃的解决方案
查看>>
Node响应中文时解决乱码问题
查看>>
node基础(二)_模块以及处理乱码问题
查看>>
node安装卸载linux,Linux运维知识之linux 卸载安装node npm
查看>>
node安装及配置之windows版
查看>>
Node实现小爬虫
查看>>
Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
查看>>
Node提示:npm does not support Node.js v12.16.3
查看>>
Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件
查看>>
Node服务在断开SSH后停止运行解决方案(创建守护进程)
查看>>
node模块化
查看>>
node模块的本质
查看>>