摘要: http://scholers.iteye.com/blog/730429我们知道,进行SOCKET tcp/ip通信的时候,不知道每次接受的报文到底有多长?也就是是判断不了报文(消息)的边界。 一般的做法有下面几种:1。设定固定长度的报文头,在固定的报文头上增加消息长度。每次读取的时候先读这个报文头,得到本次消息的总体长度。2。在报文中设定特殊字符作为边界。比如:***************************之类的特殊符号等。MINA2(我采用的版本是MINA2 RC1版本)中我采用第一种方式来读取消息报文。具体代码:可以利用IoBuffer的prefixedDataAvailabl 阅读全文
posted @ 2012-01-11 13:55 balaamwe 阅读(1476) 评论(0) 推荐(1) 编辑
摘要: 1.position例:Java代码position()第一次使用返回值为当前位置:0position(8) 返回第8个字节以后的数据(包括第8个)可以和 limit 联合使用如:Java代码buffer.position(3);buffer.limit(7);ByteBufferslice=buffer.slice();再次调用 position() 返回:82.remaining例:Java代码ByteBufferbyt=ByteBuffer.allocate(128,false);第一次调用byt.remaining(); 返回 128A、使用:byt.putInt(5);或者byt.g 阅读全文
posted @ 2012-01-11 13:54 balaamwe 阅读(2184) 评论(0) 推荐(1) 编辑
摘要: http://scholers.iteye.com/blog/784336 MINA2中(MINA2 RC版本,MINA2.0正式版已经发布)服务端接受数据默认有一定长度的缓冲区(可以在启动的时候设置)。那么对于大报文,怎么处理呢?比如说超过1024,甚至更多?MINA2为了节省网络流量,提高处理效率,会将大报文自动拆分(可能是存放MINA2中的缓冲区里面):比如2048字节的报文,就会拆分成两次;那么在接受的时候,就有一个如何判断是完整报文的问题,或者说是一个拆包组包的问题。 MINA2中初始化服务的时候是可以设置输入和输出的缓冲区的:Java代码acceptor.getSessionCon 阅读全文
posted @ 2012-01-11 13:53 balaamwe 阅读(1034) 评论(0) 推荐(0) 编辑
摘要: 一、背景MINA框架允许开发人员在编写基于MINA的应用程序时使用自己熟悉的日志系统。二、SLF4JMINA框架使用Simple Logging Facade for Java (SLF4J)。你可以在这里获取到更多关于SLF4J的信息,这种日志系统兼容各种日志系统的实现。你可能会使用log4j、java.util.logging或其他的日志系统,使用这种日志框架的好处在于如果你在开发过程中,将日志系统从java.util.logging改为log4j,你根本不需要修改你的代码。选择正确的jar包Logging frameworkRequired JARsLog4J 1.2.xslf4j-ap 阅读全文
posted @ 2012-01-11 13:41 balaamwe 阅读(2238) 评论(0) 推荐(0) 编辑
摘要: privatevoidcheckDeadLock(){//Onlyread/write/connect/writefuturecancausedeadlock.if(!(thisinstanceofCloseFuture||thisinstanceofWriteFuture||thisinstanceofReadFuture||thisinstanceofConnectFuture)){return;}//GetthecurrentthreadstackTrace.//UsingThread.currentThread().getStackTrace()isthebestsolution,// 阅读全文
posted @ 2012-01-11 10:47 balaamwe 阅读(1145) 评论(0) 推荐(0) 编辑