Netty4.0中LengthFieldBasedFrameDecoder的使用心得

本文主要探讨在Netty4.0中使用LengthFieldBasedFrameDecoder来处理二进制数据包的粘包和分包问题。通过实例展示了如何在客户端和服务端配置LengthFieldPrepender和LengthFieldBasedFrameDecoder,并分析了源码,以理解其工作原理。同时,文章提到了不同客户端如java.net.Socket的情况,以及如何调整参数来适应不同的包结构。
摘要由CSDN通过智能技术生成

Netty4.0中LengthFieldBasedFrameDecoder的使用心得


本文中示例代码使用的是Netty4.0开发包,本人也是根据《Netty权威指南》进行的自学,若有不对的地方请大家指正。
本文主要是针对遇到二进制数据包的粘包与分包问题的学习心得。



使用Netty实现客户端、服务端

若通信是全部使用Netty自带的API进行通信时,该问题都非常好解决。
客户端中LengthFieldPrepender进行编码设置,不需要关心Length的大小计算,只需要按照包结构的顺序进行数据发送即可。
示例中包结构如下:
|–Length(int)–|–Txt(bytes)–|

/// client 初始化
Bootstrap bs = new Bootstrap();
bs.group(group).channel(NioSocketChannel.class)
.option(ChannelOption.TCP_NODELAY, true)
.handler(new ChannelInitializer<SocketChannel>() {
    @Override
    protected void initChannel(SocketChannel ch) throws Exception
    {
        ChannelPipeline pipe = ch.pipeline();
        pipe.addLast(new LengthFieldPrepender(4, false));
        /// 从ClientHandler中获取ChannelHandlerContext txt
        pipe.addLast(
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值