博客
关于我
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/

你可能感兴趣的文章
Python基础语法:基本数据类型(数字类型和布尔类型)
查看>>
Python基础语法:基本数据类型(列表)
查看>>
Python基础语法:内置函数
查看>>
Python基础语法:你不得不知的几种变量类型
查看>>
Python基础语法教程,零基础入门到精通,看完这一篇就够了
查看>>
Python基础语法与执行脚本的3种方式
查看>>
python基础语法
查看>>
python基础语法
查看>>
python系列【仅供参考】:python测试开发基础---multiprocessing.Pool
查看>>
Python基础综合练习
查看>>
Python基础练习之一输出10000以内的阿姆斯特朗数
查看>>
Python基础系列讲解—动态类型语言的特点
查看>>
python基础系列四:字符串,列表,字典,元组之间的转换
查看>>
python基础篇(9):模块
查看>>
python基础篇(8):异常处理
查看>>
python基础篇(8):字符串常用处理汇总
查看>>
python基础篇(7):函数进阶知识点
查看>>
python基础篇(6):global关键字
查看>>
python基础篇(5):None类型
查看>>
python基础篇(4):range语句
查看>>