我们知道,进行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解决了通讯问题,那么我们只需要关心解码问题了。
分享到:
相关推荐
2. **Mina文件图片传送** 在Mina中,我们可以利用BufferedIoFilter或者IoBuffer来传输文件,包括图片。首先,我们需要将图片文件读取到内存中的IoBuffer,然后通过过滤器链传递给远程客户端。在这个过程中,可以...
2. **创建Mina Server**:在Mina中,服务器端通常会创建一个Acceptor对象,监听指定端口上的连接请求。通过添加Filter链,可以实现数据的编码解码、安全加密等功能。 3. **SSL加密**:为了实现SSL加密,Mina提供了...
在压缩包子文件的文件名“M2M”中,通常M2M代表Machine-to-Machine通信,这可能是指使用MINA来实现设备之间的数据交换,例如在物联网(IoT)环境中。MINA的灵活性和可扩展性使得它适合于处理各种设备间的通信需求,...
Java Mina2是一个高度可扩展且高性能的网络通信框架,主要用在开发基于TCP、UDP等协议的服务端应用。它提供了简单而强大的API,使得开发者能够轻松构建网络应用程序,如服务器端的聊天室、游戏服务器或者任何需要...
MINA2(全称:Java Multi-Protocol Infrastructure)是Apache软件基金会的一个开源项目,主要针对网络应用程序开发,尤其适用于创建高性能、高可扩展性的网络服务器。MINA2提供了一个抽象层,允许开发者编写与传输...
- 编解码器应该考虑数据的边界问题,确保正确识别和处理完整的数据包。 4. **示例解析** - 文件`example`可能包含了一个使用mina编写的服务器或客户端程序,其中包含了自定义编解码器的应用实例。 - `MinaCodec`...
《MINA2核心框架:构建高性能网络应用》 MINA(Java Multithreaded Network Application Framework)是一个由Apache软件基金会开发的开源网络通信框架,主要应用于构建高性能、高可用性的网络服务。MINA2作为其最新...
《MINA2推送Demo客户端详解及应用》 MINA(Multi-purpose Infrastructure for Network Applications)是一个高性能、异步的网络通信框架,由Apache软件基金会开发,主要用于构建网络应用程序,如TCP/IP和UDP/IP协议...
### Mina2学习笔记知识点概览 #### 一、Mina入门详解 ##### 第一步:下载使用的Jar包 - **mina-core-2.0.0-M1.jar**:这是Mina核心库,提供了NIO框架的基本功能。 - **slf4j-api-1.5.2.jar**:用于日志记录的高级...
标题"mina2 源码 mina"暗示我们将探讨MINA2的源代码,这是一个非常有价值的资源,对于理解MINA的工作原理、学习如何构建网络应用程序以及定制MINA的行为非常有用。MINA的源码包含了丰富的注释和示例,可以帮助开发者...
“服务端基于MINA2的UDP双向通信Demo演示(MINA2服务端)” 这个标题表明这是一个使用MINA2框架在服务端实现的UDP(User Datagram Protocol)双向通信的示例代码。MINA2是一个开源的Java网络应用程序框架,它简化了...
《Mina2与Spring整合应用实战》 在Java开发领域,Apache Mina和Spring框架的结合使用能够构建高效、可扩展的网络应用。Mina2作为一个轻量级的网络通信框架,提供了高度抽象的API,使得开发者可以方便地处理网络I/O...
### Apache Mina 2完全自学手册关键知识点解析 #### 引言 Apache Mina 2是Apache项目下的一款高性能、高可扩展性的网络应用框架,它简化了Java NIO编程,使得开发者能够更加轻松地构建复杂的网络应用。Mina通过...
**Mina2.x开发示例** Apache Mina是一个开源项目,提供了一个高度可扩展的网络通信框架,适用于各种协议,如TCP、UDP和HTTP。它主要用于简化开发高性能、高并发的网络应用程序,如服务器和客户端。在Mina2.x版本中...
Mina2与Netty4是两种非常流行的网络编程框架,它们都用于构建高性能的网络服务器和客户端。由于它们都是基于Java NIO实现,因此有很多共同点,但同时也存在一些重要的差异。接下来将根据标题和描述的要求详细分析...
MINA2,全称为“Java Multithreaded Network Application Framework”,是Apache软件基金会的一个开源项目,主要用于构建高性能、高可扩展性的网络应用。这个压缩包包含的资源是MINA2的用户手册,分别有中文和英文两...
根据提供的信息,我们可以详细解析与"Mina2中文文档"相关的各个关键知识点: ### Mina2中文文档概述 #### Introduction Mina2是一个基于NIO(Non-blocking I/O)的高效网络通信框架,由Apache软件基金会维护。该...
2. **创建Mina服务端** - **配置Acceptor**:使用`org.apache.mina.core.service.TcpServerAcceptor`或`NioSocketAcceptor`来监听指定端口,准备接收连接请求。 - **设置处理器**:实现`IoHandler`接口,定义当有...
《mina2实现Socket通信调用远程方法详解》 在当今的分布式系统中,远程方法调用(Remote Method Invocation,RMI)是常见的通信方式之一,它允许程序在不同的网络节点间透明地调用方法,极大地简化了分布式应用的...
### Mina2源码分析——核心模块解析 #### 概述 Mina2是一个高性能、可扩展的网络应用框架,支持多种传输协议如TCP、UDP等,并提供了丰富的API供开发者使用。本文旨在深入剖析Mina2的核心部分,帮助读者更好地理解和...