博客
关于我
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前端之css
查看>>
Python制作进度条,原来有这么多方法
查看>>
Python制作简单的学生成绩管理系统
查看>>
python制作甘特图的基本知识(附Demo)
查看>>
python制作一个简单的服务器,【Python】 做一个简单的 http 服务器
查看>>
Python到底能做什么?它的优点在哪?
查看>>
python利用pytorch库导出图像分割算子
查看>>
python利用pyshark监听网卡来抓包其中pyshark中摸索的一些可用参数
查看>>
python利用excel分析过杀漏失
查看>>
python判断汉字数目
查看>>
python判断文件是空的,如果是空的,就删除
查看>>
python判断密码是否正确_python密码判断是否符合要求的方法
查看>>
python判断字符串包含中文_Python 判断字符串是否包含中文
查看>>
python删除第一行_Python 乱码指北:一行删掉根目录
查看>>
Python删除列表元素的三种方法
查看>>
python初步学习-python数据类型-集合(set)
查看>>
python列表生成字典_Python中将字典转换为列表的方法
查看>>
python列表对应元素合并为列表及判断一个列表是几维
查看>>
python列表去重复后按照顺序_从包含不可共元素的Python列表中删除重复元素,同时保留顺序?...
查看>>
python列表前几个_python之列表
查看>>