Netty在Android开发中的应用实战系列(四)——— 粘包 拆包 处理

本文介绍了Netty在Android开发中的粘包现象,并提供了使用DelimiterBasedFrameDecoder解码器处理粘包的实例,通过特殊字符`$`进行数据分隔。文章详细阐述了解决粘包的步骤,包括服务端和客户端的配置,帮助读者理解并实现在Android项目中使用Netty处理粘包问题。
摘要由CSDN通过智能技术生成

本文来自阿钟的投稿,阅读大约8分钟

一、什么粘包呢?

简单来说就是:发送的多个包被粘到了一块变成了一个包。
比如说:服务端连续发送了两个包客户端确只收到了一条包(这一个包里其实就是两个数据包),正常来说客户端也应该收到两个包。这就是所谓的粘包 客户端遇到这种情况就需要做拆包处理了。

二、一般处理粘包的手段

  • 使用固定长度的数据

  • 使用特殊字符分割($、\n….)

  • 其他

Netty也为我们提供了几个处理粘包的解码器,如下:

  • DelimiterBasedFrameDecoder 基于特殊字符进行粘包拆包处理

  • FixedLengthFrameDecoder 基于固定长度进行粘包拆包处理

  • LengthFieldBasedFrameDecoder 基于消息头指定消息长度进行粘包拆包处理

  • LineBasedFrameDecoder 基于换行符( \r\n,\n)进行粘包拆包处理

三、下面通过一个示例来处理粘包拆包,这里我使用`DelimiterBasedFrameDecoder` 这个解码器然后使用`$`作为特殊分隔符

3.1 首先给服务端添加`DelimiterBasedFrameDecoder`

 1/**
 2 * 启动tcp服务端
 3 */
 4public void startServer() {
 5    try {
 6        EventLoopGroup bossGroup = new NioEventLoopGroup();
 7        EventLoopGroup workerGroup = new NioEventLoopGroup();
 8        ServerBootstrap b = new ServerBootstrap();
 9        b.group(bossGroup, workerGroup)
10                .channel(NioServerSocketChannel.class)
11                .childHandler(new ChannelInitializer<SocketChannel>() {
12                    //分隔符
13                    ByteBuf delimiter = Un
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值