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(