`
scholers
  • 浏览: 619700 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MINA2判断报文边界

阅读更多
我们知道,进行SOCKET tcp/ip通信的时候,不知道每次接受的报文到底有多长?也就是是判断不了报文(消息)的边界。
  一般的做法有下面几种:
1。设定固定长度的报文头,在固定的报文头上增加消息长度。每次读取的时候先读这个报文头,得到本次消息的总体长度。
2。在报文中设定特殊字符作为边界。比如:
***************************
之类的特殊符号等。

MINA2(我采用的版本是MINA2 RC1版本)中我采用第一种方式来读取消息报文。
具体代码:可以利用IoBuffer的prefixedDataAvailable方法得到消息头,可惜看了MINA2的源代码之后,prefixedDataAvailable方法的参数只是是1,2,4,也就是说只能设定1,2,4位长度的消息头,这样如果你是自定义长度的报文头,那可就不支持了,不过可以修改MINA2的源码来实现自己特殊的要求。
  如下面的写法:
 

f (in.prefixedDataAvailable(4)) { //判断是否存在4字节的消息头
            int length = in.getInt(); 
            byte[] bytes = new byte[length]; 
            in.get(bytes); 

 



MINA2中,当启动一个服务端的时候,要设定初始化缓冲区的长度,如果不设置这个值,好像系统默认为2048,当客户端发过来的消息超过设定值的时候,MINA2的机制是分段接受的,将字符是放入缓冲区中读取,所以在读取消息的时候,需要判断有多少次。

		
    final IoAcceptor acceptor = new NioSocketAcceptor();
   acceptor.getSessionConfig().setReadBufferSize(2048);


这样的话,我们如来来判断几次接收只有是一个完成的消息呢?一种做法是将你的数据分段的放入session中,每次从session中读取,直到读取完整之后,再做解码--业务操作。由于MINA2解决了通讯问题,那么我们只需要关心解码问题了。
分享到:
评论
3 楼 scholers 2012-06-01  
zfms 写道
请问大侠qq多少?

邮件:scholers@gmail.com
qq很少上的
2 楼 scholers 2012-06-01  
51308802
1 楼 zfms 2012-05-31  
请问大侠qq多少?

相关推荐

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

    2. **Mina文件图片传送** 在Mina中,我们可以利用BufferedIoFilter或者IoBuffer来传输文件,包括图片。首先,我们需要将图片文件读取到内存中的IoBuffer,然后通过过滤器链传递给远程客户端。在这个过程中,可以...

    mina学习基础-入门实例-传输定长报文(三)

    2. **创建Mina Server**:在Mina中,服务器端通常会创建一个Acceptor对象,监听指定端口上的连接请求。通过添加Filter链,可以实现数据的编码解码、安全加密等功能。 3. **SSL加密**:为了实现SSL加密,Mina提供了...

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

    在压缩包子文件的文件名“M2M”中,通常M2M代表Machine-to-Machine通信,这可能是指使用MINA来实现设备之间的数据交换,例如在物联网(IoT)环境中。MINA的灵活性和可扩展性使得它适合于处理各种设备间的通信需求,...

    Java mina2源码

    Java Mina2是一个高度可扩展且高性能的网络通信框架,主要用在开发基于TCP、UDP等协议的服务端应用。它提供了简单而强大的API,使得开发者能够轻松构建网络应用程序,如服务器端的聊天室、游戏服务器或者任何需要...

    mina2技术知识

    MINA2(全称:Java Multi-Protocol Infrastructure)是Apache软件基金会的一个开源项目,主要针对网络应用程序开发,尤其适用于创建高性能、高可扩展性的网络服务器。MINA2提供了一个抽象层,允许开发者编写与传输...

    mina自定义编解码器详解

    - 编解码器应该考虑数据的边界问题,确保正确识别和处理完整的数据包。 4. **示例解析** - 文件`example`可能包含了一个使用mina编写的服务器或客户端程序,其中包含了自定义编解码器的应用实例。 - `MinaCodec`...

    mina2核心框架

    《MINA2核心框架:构建高性能网络应用》 MINA(Java Multithreaded Network Application Framework)是一个由Apache软件基金会开发的开源网络通信框架,主要应用于构建高性能、高可用性的网络服务。MINA2作为其最新...

    mina2推送demo客户端

    《MINA2推送Demo客户端详解及应用》 MINA(Multi-purpose Infrastructure for Network Applications)是一个高性能、异步的网络通信框架,由Apache软件基金会开发,主要用于构建网络应用程序,如TCP/IP和UDP/IP协议...

    mina2 源码 mina

    标题"mina2 源码 mina"暗示我们将探讨MINA2的源代码,这是一个非常有价值的资源,对于理解MINA的工作原理、学习如何构建网络应用程序以及定制MINA的行为非常有用。MINA的源码包含了丰富的注释和示例,可以帮助开发者...

    服务端基于MINA2的UDP双向通信Demo演示(MINA2服务端)

    “服务端基于MINA2的UDP双向通信Demo演示(MINA2服务端)” 这个标题表明这是一个使用MINA2框架在服务端实现的UDP(User Datagram Protocol)双向通信的示例代码。MINA2是一个开源的Java网络应用程序框架,它简化了...

    mina2+spring结合实例

    《Mina2与Spring整合应用实战》 在Java开发领域,Apache Mina和Spring框架的结合使用能够构建高效、可扩展的网络应用。Mina2作为一个轻量级的网络通信框架,提供了高度抽象的API,使得开发者可以方便地处理网络I/O...

    mina2.x开发示例

    **Mina2.x开发示例** Apache Mina是一个开源项目,提供了一个高度可扩展的网络通信框架,适用于各种协议,如TCP、UDP和HTTP。它主要用于简化开发高性能、高并发的网络应用程序,如服务器和客户端。在Mina2.x版本中...

    MINA2 用户手册(中英文2个版本)加API(英文)

    MINA2,全称为“Java Multithreaded Network Application Framework”,是Apache软件基金会的一个开源项目,主要用于构建高性能、高可扩展性的网络应用。这个压缩包包含的资源是MINA2的用户手册,分别有中文和英文两...

    Mina2中文文档

    根据提供的信息,我们可以详细解析与"Mina2中文文档"相关的各个关键知识点: ### Mina2中文文档概述 #### Introduction Mina2是一个基于NIO(Non-blocking I/O)的高效网络通信框架,由Apache软件基金会维护。该...

    Mina自定义协议简单实现

    2. **创建Mina服务端** - **配置Acceptor**:使用`org.apache.mina.core.service.TcpServerAcceptor`或`NioSocketAcceptor`来监听指定端口,准备接收连接请求。 - **设置处理器**:实现`IoHandler`接口,定义当有...

    mina2 实例程序(socket通讯调用远程方法)

    《mina2实现Socket通信调用远程方法详解》 在当今的分布式系统中,远程方法调用(Remote Method Invocation,RMI)是常见的通信方式之一,它允许程序在不同的网络节点间透明地调用方法,极大地简化了分布式应用的...

    Mina2源码分析

    ### Mina2源码分析——核心模块解析 #### 概述 Mina2是一个高性能、可扩展的网络应用框架,支持多种传输协议如TCP、UDP等,并提供了丰富的API供开发者使用。本文旨在深入剖析Mina2的核心部分,帮助读者更好地理解和...

Global site tag (gtag.js) - Google Analytics