netty之NettyServer接收数据

前言

对于一个初学者,不建议上来就研究理论,实操往往更重要。本章节介绍使用netty端写一个能接收数据的socketServer服务端,通过实现通道适配器ChannelInboundHandlerAdapter.channelRead获取并并解析接收数据

一:MyChannelInitializer

java 复制代码
public class MyChannelInitializer extends ChannelInitializer<SocketChannel> {

    @Override
    protected void initChannel(SocketChannel channel) {

        System.out.println("链接报告开始");
        System.out.println("链接报告信息:有一客户端链接到本服务端");
        System.out.println("链接报告IP:" + channel.localAddress().getHostString());
        System.out.println("链接报告Port:" + channel.localAddress().getPort());
        System.out.println("链接报告完毕");

        //在管道中添加我们自己的接收数据实现方法
        channel.pipeline().addLast(new MyServerHandler());

    }

MyServerHandler

java 复制代码
public class MyServerHandler extends ChannelInboundHandlerAdapter {

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        //接收msg消息
        ByteBuf buf = (ByteBuf) msg;
        byte[] msgByte = new byte[buf.readableBytes()];
        buf.readBytes(msgByte);
        System.out.print(new Date() + "接收到消息:");
        System.out.println(new String(msgByte, Charset.forName("GBK")));
    }
}
java 复制代码
public class NettyServer {
    public static void main(String[] args) {
        new NettyServer().bing(7397);
    }

    private void bing(int port) {
        //配置服务端NIO线程组
        //NioEventLoopGroup extends MultithreadEventLoopGroup Math.max(1, SystemPropertyUtil.getInt("io.netty.eventLoopThreads", NettyRuntime.availableProcessors() * 2));
        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("com.lm.netty03 server start done. {关注码农明哥:获取源码}");
            f.channel().closeFuture().sync();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            childGroup.shutdownGracefully();
            parentGroup.shutdownGracefully();
        }

    }
}

启动

NettyServer

好了到这里就结束了基础netty之NettyServer接收数据的学习,大家一定要跟着动手操作起来。需要的源码的 可si我获取;

相关推荐
阿正的梦工坊4 小时前
JavaScript 微任务与宏任务完全指南
开发语言·javascript·ecmascript
chools4 小时前
【AI超级智能体】快速搞懂工具调用Tool Calling 和 MCP协议
java·人工智能·学习·ai
知行合一。。。5 小时前
Python--05--面向对象(属性,方法)
android·开发语言·python
李白你好5 小时前
TongWeb EJB 反序列化生成工具(Java-Chain 插件)
java·安全
leobertlan5 小时前
好玩系列:用20元实现快乐保存器
android·人工智能·算法
青梅橘子皮5 小时前
C语言---指针的应用以及一些面试题
c语言·开发语言·算法
浅时光_c5 小时前
3 shell脚本编程
linux·开发语言·bash
Evand J6 小时前
【三维轨迹目标定位,CKF+RTS,MATLAB程序】基于CKF与RTS平滑的三维非线性目标跟踪(距离+方位角+俯仰角)
开发语言·matlab·目标跟踪
U盘失踪了6 小时前
Java 的 JAR 是什么?
java·jar
今天又在写代码6 小时前
java-v2
java·开发语言