`
zpball
  • 浏览: 917025 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mina解包和发包

    博客分类:
  • Mina
阅读更多
解包:

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 协议 解包 粘包

    mina 协议 解包 粘包

    Java mina2源码

    Java Mina2是一个高度可扩展且高性能的网络通信框架,主要用在开发基于TCP、UDP等协议的服务端应用。它提供了简单而强大的API,使得...学习Mina2不仅可以提升专业技能,还能为将来的工作和项目带来更大的灵活性和效率。

    mina的高级使用,mina文件图片传送,mina发送文件,mina报文处理,mina发送xml和json

    在本文中,我们将深入探讨Mina的高级使用,特别是在文件图片传送、文件发送、XML和JSON报文处理方面的实践。 1. **Mina的高级使用** Mina的核心在于其异步事件驱动的模型,这使得它在处理大量并发连接时表现出色。...

    apache-mina-2.0.4.rar_apache mina_mina

    Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...

    3本mina教程和mina帮助文档

    Apache Mina是一个开源项目,它提供了一个高度可扩展的网络通信框架,主要用于简化网络应用的开发,特别是对于TCP和UDP协议。Mina以其高效的性能、灵活性和强大的功能在Java开发者中受到广泛欢迎,尤其适用于构建高...

    Mina+Socket通信

    Mina和Socket是两种常见的网络通信框架和技术,它们在Java编程环境中被广泛使用。本篇文章将深入探讨如何使用Mina与Socket实现通信,并提供客户端和服务端的实现代码概述。 Mina(全称“MINA: Minimalistic ...

    mina连接 mina心跳连接 mina断线重连

    总结起来,Apache Mina提供了一套强大的网络通信框架,通过其心跳连接和断线重连功能,可以确保服务的稳定性和可靠性。对于Android开发者来说,理解和应用这些机制,能够有效提升应用程序的网络通信质量。

    MINA 服务端和客户端demo

    MINA(Multipurpose Infrastructure for Network Applications)是Apache软件基金会的一个开源项目,提供了一套高度可扩展和高性能的网络应用程序框架,用于构建服务器和客户端应用。它简化了网络编程,特别是TCP/IP...

    MINA_API+MINA_DOC+mina

    这个压缩包包含了MINA API文档、自学手册以及开发指南,对于学习和理解MINA框架有极大的帮助。 首先,`MINA-2.0.0-API.chm` 文件是MINA 2.0版本的API帮助文档,它是以CHM(Compiled Help Manual)格式编译的Windows...

    mina服务器和客服端实现

    《mina服务器和客户端实现详解》 Apache Mina(Minimum Asynchronous Network)是一个高度可扩展的网络通信框架,它为开发者提供了构建高性能、高可用性的网络应用程序的基础。在本文中,我们将深入探讨如何利用...

    mina和protobuf整合教程

    《mina和protobuf整合教程》 在Java开发领域,MINA(Multi-purpose Infrastructure for Network Applications)是一个功能强大的网络应用框架,而Protocol Buffers是Google推出的一种高效的数据序列化协议。这两者...

    MINA开发手册和JAR包

    MINA(Java IO Network Application Framework)是一个开源的网络应用程序框架,由Apache软件基金会维护,它为构建高性能、高可用性的网络应用提供了丰富的API和工具。MINA的目标是简化网络编程,无论你是在处理TCP/...

    Mina实现长连接和短连接实例

    Apache Mina是一个流行的Java框架,专门用于简化和优化网络应用开发,它支持多种协议如TCP/IP、UDP/IP等,并提供了长连接和短连接的支持。在这个实例中,我们将探讨如何使用Mina实现长连接和短连接。 首先,理解长...

    mina心跳包机制

    mina心跳包机制是Apache Mina框架中的一个关键特性,它用于维持网络连接的活跃状态,确保数据能够在客户端和服务端之间顺畅地传输。Mina是一个高度可扩展的Java网络应用框架,广泛应用于各种分布式系统和网络服务,...

    给予mina 协议进行大数据传输

    MINA是Apache软件基金会的一个项目,它提供了一个高度可扩展和高性能的网络应用开发框架,适用于多种传输协议,如TCP/IP和UDP/IP,以及SSL/TLS加密。在大数据传输场景中,MINA因其非阻塞I/O模型而被广泛采用,能够...

    Mina开发实例(服务端、客户端)DEMO

    Apache Mina是一个高度可扩展的网络通信框架,它允许开发者创建高性能、高效率的服务端和客户端应用程序。在Java世界中,Mina以其简洁的API和灵活性而受到青睐,尤其适用于处理大量的并发连接,如TCP/IP和UDP协议。...

    mina新手教程源码 mina+springboot+idea最简单的案例。

    * 1、添加@Controller注解和 @PostConstruct注解,代表启动springboot项目时也调用该类下的该方法, * 启动springboot项目,会启动两个服务两个端口,一个是http服务,一个是mina服务。两个服务互不影响 * 2、...

    Java springboot 整合mina 框架,nio通讯基础教程,mina框架基础教程.zip

    在这个压缩包中,包含了“Java_NIO基础视频教程”和“MINA视频教程”,你可以通过观看这些教程,了解和学习NIO和Mina的基本用法。同时,“Netty快速入门视频(52im.net).txt”虽然不是直接与Mina相关的,但Netty也是...

    mina.zip内涵所有mina所需jar包

    总的来说,这个"mina.zip"是一个方便开发和测试Apache Mina应用的资源包,包含了运行Mina所需的所有依赖,简化了项目的构建和部署过程。通过理解和利用这些库,开发者可以高效地构建面向网络的服务,实现复杂的数据...

    mina 上传文件和文件名

    本文将围绕"MINA上传文件和文件名"这一主题,深入探讨MINA的核心特性、文件上传的实现机制以及如何处理文件名。 MINA的核心特性包括非阻塞I/O、事件驱动的架构、多线程模型和丰富的缓冲区管理。非阻塞I/O使得MINA...

Global site tag (gtag.js) - Google Analytics