Mina 编解码器(解决粘包,断包问题)

本文详细介绍了TCP通信中的断包、粘包现象及其原因,并结合Mina框架,通过CumulativeProtocolDecoder解释了解决此类问题的方法。讨论了数据包的格式和解码器的工作原理,提供了Mina实例代码,包括解码器类和相关工具方法,以实现字符串数据的正确传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

什么导致了断包、粘包:

        mina是基于TCP/IP、UDP/IP协议栈的通信框架。Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。

        断包、粘包的问题,是Mina基于TCP协议栈通信的问题。TCP是面向流的,而面向流传输的数据是无保护边界的,无保护边界代表着如果发送端连续传输数据接收端有可能在一次接收动作中,会接收两个或者更多的数据包。

什么是消息保护边界和无消息保护边界:

消息保护边界:就是传输协议把数据当做独立的一条数据在网上进行传输,而且接收端也只能接收独立的消息,也就是因为存在着消息保护边界,接收端一次只能接收发送端传来的一个数据包,这一点有一点像UDP协议。

无消息保护边界:面向流传输数据的是无消息保护边界的,也就是在发送端连续发送数据的情况下接受端可能会在一次中接收两个或多个数据包。

断包、粘包的体现实例:

① 先接收到数据包A,然后接收到数据包B;

② 先接收到数据包A的部分数据,然后接收到数据包A的剩余数据和数据包的全部数据。

③ 先接受到数据包A的全部数据和数据包B的部分数据,然后接收到数据包B的剩余全部数据。

④ 一次性接收完数据包A和数据包B的全部数据。

 

① 正常的情况

② 断包+粘包

③ 粘包+断包

④ 粘包

数据包(消息)的格式:

 

包头 + 消息长度(int)+消息内容(json字符串、普通字符串)+ 包尾

 

Mina处理 断包、粘包问题

       在Mina框架中有个——CumulativeProtocolDecoder (累积性的协议解码器),专门用来处理粘包和断包问题。doDecode()的返回值有重要作用。

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值