mina codec 防止粘包
我在头部 和尾部都插有字符,类似 大小端
package com.baoy.code; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolCodecFactory; import org.apache.mina.filter.codec.ProtocolDecoder; import org.apache.mina.filter.codec.ProtocolEncoder; /** * * @author baoyou E-mail:curiousby@163.com * @version 2017年4月21日 上午10:35:05 * desc: */ public class CodecFactory implements ProtocolCodecFactory { private static ProtocolEncoder encoder = new CodeProtocolEncoder(); private static ProtocolDecoder decoder = new CodeProtocolDecoder(); @Override public ProtocolEncoder getEncoder(IoSession ioSession) throws Exception { return encoder; } @Override public ProtocolDecoder getDecoder(IoSession ioSession) throws Exception { return decoder; } }
package com.baoy.code; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.CumulativeProtocolDecoder; import org.apache.mina.filter.codec.ProtocolDecoderOutput; /** * * @author baoyou E-mail:curiousby@163.com * @version 2017年4月21日 上午10:35:14 * desc: */ public class CodeProtocolDecoder extends CumulativeProtocolDecoder { @Override protected boolean doDecode(IoSession ioSession, IoBuffer in, ProtocolDecoderOutput out) throws Exception { while (in.remaining() >= 4) { in.mark(); byte[] sign = new byte[1]; in.get(sign, 0, 1); if (sign[0] != (byte) 0xF0 ) { throw new Exception("Bad package header, need 0xF0"); } byte[] lenBytes = new byte[2]; in.get(lenBytes, 0, 2); short length = CodeProtocolDecoder.getShort(lenBytes, 0); if (length > in.remaining()) { in.reset(); return false; } byte[] buffer = new byte[length]; in.get(buffer, 0, length); String msg = new String(buffer,"UTF-8"); byte[] sign2 = new byte[1]; in.get(sign2, 0, 1); if (sign2[0] != (byte) 0x80 ) { throw new Exception("Bad package tail, need 0x80"); } out.write(msg); } return false; } public static short getShort(byte[] buff, int pos) throws Exception { if (pos > buff.length - 2 || pos < 0) throw new Exception("Socket buffer Overflow"); int num = 0; for (int ix = 0; ix < 2; ++ix) { num <<= 8; num |= (buff[pos + ix] & 0xff); } return (short) num; } }
package com.baoy.code; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolEncoder; import org.apache.mina.filter.codec.ProtocolEncoderOutput; /** * * @author baoyou E-mail:curiousby@163.com * @version 2017年4月21日 上午10:35:19 * desc: */ public class CodeProtocolEncoder implements ProtocolEncoder { @Override public void encode(IoSession ioSession, Object msg, ProtocolEncoderOutput out) throws Exception { byte[] bytes =((String)msg).getBytes("UTF-8"); IoBuffer buffer = IoBuffer.allocate(bytes.length + 4, false); buffer.put((byte) 0xF0); buffer.put((byte) (bytes.length >> 8)); buffer.put((byte) (bytes.length)); buffer.put(bytes, 0, bytes.length); buffer.put((byte) 0x80); buffer.flip(); out.write(buffer); } @Override public void dispose(IoSession ioSession) throws Exception { } }
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(支持支付宝和微信捐助,加入it技术扣扣群),没钱捧个人场,谢谢各位。
谢谢您的赞助,我会做的更好!
相关推荐
本代码主要针对于解决mina 断包,丢包问题,里面包含客户端,服务端,直接可以使用客户端可以进行测试
Mina断包,粘包的处理。(完整实例,客户端,服务端)
mina 协议 解包 粘包
NULL 博文链接:https://jean7155.iteye.com/blog/1954890
mina-filter-codec-netty-2.0.0-M6.jar mina-filter-compression-2.0.0-M6.jar mina-integration-beans-2.0.0-M6.jar mina-integration-jmx-2.0.0-M6.jar mina-integration-ognl-2.0.0-M6.jar mina-integration-...
springboot集成mina实现串口协议对接,包含断包、粘包处理。串口协议发送与接收是异步的,发送没有返回,只能通过监听获取。
处理Bytes粘包、半包、断包(ByteArrayDecoder),需配置自己的首尾标识符, 如果与首尾标识符相同的数据出现在首尾标识符以内的范围,建议将该数据进行转义, 如这样配置转义规则(假设首尾标识符是0x7e): 0x7e = 0x...
mina连接,mina心跳连接,mina断线重连。其中客户端可直接用在android上。根据各方参考资料,经过自己的理解弄出来的。CSDN的资源分太难得了。
Chapter 11 - Codec Filter Chapter 12 - Executor Filter Chapter 13 - SSL Filter Chapter 14 - Logging Filter Part III - MINA Advanced Chapter 15 - Debugging Chapter 16 - State Machine Chapter 17 - ...
mina的使用初步入门mina的使用初步入门mina的使用初步入门
mina的高级使用,mina文件图片传送,
里面包含mina2.0的api(英文)和mina自学手册,还有mina的开发指导
Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。 当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版...
Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)
深入理解Apache_Mina_(1)----_Mina的几个类 深入理解Apache_Mina_(2)----_与IoFilter相关的几个类 深入理解Apache_Mina_(3)----_与IoHandler相关的几个类 深入理解Apache_Mina_(4)----_IoFilter和IoHandler的区别和...
mina内部源码,可以深入的研究下,重构修改后获得的效率更加突出
mina新手案例,mina新手教程源码 mina+springboot最简单的案例。用的IDEA * mina服务端 * 1、添加@Controller注解和 @PostConstruct注解,代表启动springboot项目时也调用该类下的该方法, * 启动springboot项目...
许多刚接触mina的朋友,对于mina的编解码器的编写很迷惑.希望这个文档可以帮助朋友们少走弯路。 资源中是一个比较典型的编解码器写法。生成了可执行文件。并对编解码器的代码有详细注释。
1.mina socket客户度工程相关类,添加mina jar包后可独立运行。 2.mina若有空闲连接则使用已有连接,若无则新建mina连接; 3.mina空闲连接超过保活时间25分钟后,自动删除; 4.mina发送指令后,接收指定时长内收到的...
mina客户端,服务器端的demo