解包:
protected boolean doDecode(IoSession session, IoBuffer in,
ProtocolDecoderOutput out) throws Exception {
//System.out.println("********** AMF3Decoder *************");
while(in.remaining() > 4){//有数据时,读取4字节判断消息长度
in.mark();
int size = in.getInt();
if(size > in.remaining()){//如果消息内容不够,则重置,相当于不读取size
in.reset();
System.out.println("粘包");
return false;//接收新数据,以拼凑成完整数据
}
else
{
byte bytes[] = new byte[size];
in.get(bytes, 0, size);
IoBuffer tempIn = IoBuffer.wrap(bytes);
amf3in.setInputStream(new InflaterInputStream(new DataInputStream(tempIn.asInputStream())));
try {
Object message = amf3in.readObject();
out.write(message);
in.free();
} catch (Exception e) {
in.reset();
System.out.println("粘包 Exception size:" +size +" in.remaining():"+in.remaining());
return false;
}
}
}
if(in.remaining()==0)
return true;//处理成功,让父类进行接收下个包
else
return false;
}
发包:
public void encode(IoSession session, Object message,ProtocolEncoderOutput out) throws Exception
{
//System.out.println("********** AMF3Encoder *************");
if(message instanceof String)
{
byte[] bytes = ((String) message).getBytes("UTF-8");
IoBuffer buffer = IoBuffer.allocate(bytes.length+1);
buffer.put(bytes);
buffer.put((byte) 0x0);//要在末尾写入0,表示一个流信息的结束
buffer.flip();
out.write(buffer);
buffer.free();// 清空?
buffer.clear();
}
else
{
IoBuffer buffer;
ByteArrayOutputStream stream = new ByteArrayOutputStream();
amf3out.setOutputStream(stream);
amf3out.writeObject(message);
amf3out.flush();
byte bytes[] = stream.toByteArray();
//byte bytes[] = compress(session,stream.toByteArray());
buffer = IoBuffer.allocate(bytes.length+4,false);//创建缓存
buffer.putInt(bytes.length);//总长度
//System.out.println(bytes.length);
buffer.put(bytes);//内容
buffer.flip();
out.write(buffer);
buffer.free();// 清空?
}
}
分享到:
相关推荐
mina 协议 解包 粘包
mina2源码
3本mina教程和mina帮助文档 将很好的3本教程和mina的帮助文档放在一起,方便大家下载,请多多支持
MINA 服务端和客户端demo
mina连接,mina心跳连接,mina断线重连。其中客户端可直接用在android上。根据各方参考资料,经过自己的理解弄出来的。CSDN的资源分太难得了。
mina-core-2.0.0-M6.jar mina-example-2.0.0-M6.jar 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-...
mina和protobuf整合教程,mina不像nety自带protobuf整合,这个教程叙述了mina和protbuf的整合。
mina的高级使用,mina文件图片传送,
里面包含mina2.0的api(英文)和mina自学手册,还有mina的开发指导
mina的使用初步入门mina的使用初步入门mina的使用初步入门
mina服务器和客服端实现,包含编解码,等一系列的代码。
Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。 当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版...
MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架。通过使用MINA框架可以可以省下处理底层I/O和线程并发等复杂工作,开发人员能够把更多的精力投入...
Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)
深入理解Apache_Mina_(4)----_IoFilter和IoHandler的区别和联系 深入理解Apache_Mina_(5)----_配置Mina的线程模型 深入理解Apache_Mina_(6)----_Java_Nio_ByteBuffer与Mina_ByteBuffer的区别(类图) 相信你们也愿意去...
内含mina服务端所有jar包(客户端只需要使用一部分即可),另外mina中文开发手册.pdf 和MINA开发文档.doc 适合学习mina的人员学习。
mina内部源码,可以深入的研究下,重构修改后获得的效率更加突出
* 1、添加@Controller注解和 @PostConstruct注解,代表启动springboot项目时也调用该类下的该方法, * 启动springboot项目,会启动两个服务两个端口,一个是http服务,一个是mina服务。两个服务互不影响 * 2、...
Apache MINA 是一个开发高性能和高可伸缩性网络应用程序的网络应用框架。它提供了一个抽象的事件驱动的异步 API,可以使用 TCP/IP、UDP/IP、串口和虚拟机内部的管道等传输方式。Apache MINA 可以作为开发网络应用...
许多刚接触mina的朋友,对于mina的编解码器的编写很迷惑.希望这个文档可以帮助朋友们少走弯路。 资源中是一个比较典型的编解码器写法。生成了可执行文件。并对编解码器的代码有详细注释。