- 浏览: 347185 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
tianshawang:
楼主你好偏心啊,把代码给谷歌不给这里
java 实现windows资源管理器 -
tianshawang:
其实我是也想要资源管理器的代码来的。。
java 实现windows资源管理器 -
hcmfys:
lonuery 写道open file 是获取要进行复制的文件 ...
JAVA 复制 带进度条 时间 百分比 -
qq657052171:
怎么没有代码呢?
java 实现windows资源管理器 -
IT女民工:
楼主,求资源管理器代码~~~~
java 实现windows资源管理器
Java服务器的JSON数据包三重加密算法(转载)
- 博客分类:
- java
mina的粘包拆包其实是蛮简单的,只是一开始没搞清楚原理。
Java服务器的JSON数据包三重加密算法
我们要约定数据包的格式,我这里的是(4个字节长度+json的string字符串)
1:写一个
这样基本没神马问题,如有问题我会继续补充
Java服务器的JSON数据包三重加密算法
我们要约定数据包的格式,我这里的是(4个字节长度+json的string字符串)
1:写一个
ProtocolCodecFactory类,用来拦截数据包处理 内容如下 public class MessageCodecFactory implements ProtocolCodecFactory { private final DataEncoderEx encoder; private final DataDecoderEx decoder; public MessageCodecFactory() { encoder = new DataEncoderEx(); decoder = new DataDecoderEx(); } /* (non-Javadoc) * @see org.apache.mina.filter.codec.ProtocolCodecFactory#getDecoder(org.apache.mina.core.session.IoSession) */ @Override public ProtocolDecoder getDecoder(IoSession session) throws Exception { return decoder; } /* (non-Javadoc) * @see org.apache.mina.filter.codec.ProtocolCodecFactory#getEncoder(org.apache.mina.core.session.IoSession) */ @Override public ProtocolEncoder getEncoder(IoSession session) throws Exception { return encoder; } } 2:在chain里面注册解码器 chain.addLast("codec", new ProtocolCodecFilter(new MessageCodecFactory())); 注意放在多线程上面,否则会导致解码混乱的情况 3:实现decode和encoder CumulativeProtocolDecoder 这个类的作用很好,我贴一个网上的总结 A. 你的doDecode()方法返回true 时,CumulativeProtocolDecoder 的decode()方法会首 先判断你是否在doDecode()方法中从内部的IoBuffer 缓冲区读取了数据,如果没有, 则会抛出非法的状态异常,也就是你的doDecode()方法返回true 就表示你已经消费了 本次数据(相当于聊天室中一个完整的消息已经读取完毕),进一步说,也就是此时你 必须已经消费过内部的IoBuffer 缓冲区的数据(哪怕是消费了一个字节的数据)。如果 验证过通过,那么CumulativeProtocolDecoder 会检查缓冲区内是否还有数据未读取, 如果有就继续调用doDecode()方法,没有就停止对doDecode()方法的调用,直到有新 的数据被缓冲。 B. 当你的doDecode()方法返回false 时,CumulativeProtocolDecoder 会停止对doDecode() 方法的调用,但此时如果本次数据还有未读取完的,就将含有剩余数据的IoBuffer 缓 冲区保存到IoSession 中,以便下一次数据到来时可以从IoSession 中提取合并。如果 发现本次数据全都读取完毕,则清空IoBuffer 缓冲区。 简而言之,当你认为读取到的数据已经够解码了,那么就返回true,否则就返回false。这 个CumulativeProtocolDecoder 其实最重要的工作就是帮你完成了数据的累积,因为这个工 作是很烦琐的。 也就是说返回true,那么CumulativeProtocolDecoder会再次调用decoder,并把剩余的数据发下来 返回false就不处理剩余的,当有新数据包来的时候把剩余的和新的拼接在一起然后再调用decoder public class DataDecoderEx extends CumulativeProtocolDecoder { @Override protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { // TODO Auto-generated method stub if(in.remaining()<4)//这里很关键,网上很多代码都没有这句,是用来当拆包时候剩余长度小于4的时候的保护,不加就出错咯 { return false; } if (in.remaining() > 1) { in.mark();//标记当前位置,以便reset int length =in.getInt(in.position()); if(length > in.remaining()-4){//如果消息内容不够,则重置,相当于不读取size System.out.println("package notenough left="+in.remaining()+" length="+length); in.reset(); return false;//接收新数据,以拼凑成完整数据 }else{ System.out.println("package ="+in.toString()); in.getInt(); byte[] bytes = new byte[length]; in.get(bytes, 0, length); String str = new String(bytes,"UTF-8"); if(null != str && str.length() > 0){ String strOut = DateSecret.decryptDES(str);//别看这里的处理,这里是我的数据包解密算法~你可以直接拿str当数据 out.write(strOut); } if(in.remaining() > 0){//如果读取内容后还粘了包,就让父类再给一次,进行下一次解析 //System.out.println("package left="+in.remaining()+" data="+in.toString()); } return true;//这里有两种情况1:没数据了,那么就结束当前调用,有数据就再次调用 } } return false;//处理成功,让父类进行接收下个包 } } public class DataEncoderEx extends ProtocolEncoderAdapter{ /* (non-Javadoc) * @see org.apache.mina.filter.codec.ProtocolEncoder#encode(org.apache.mina.core.session.IoSession, java.lang.Object, org.apache.mina.filter.codec.ProtocolEncoderOutput) */ public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception { System.out.println(message); IoBuffer buf = IoBuffer.allocate(100).setAutoExpand(true); String strOut = DateSecret.encryptDES(message.toString());//别看这里的处理,这里是我的数据包加密算法~你可以直接拿message.toString当数据 buf.putInt(strOut.getBytes(Charset.forName("utf-8")).length); buf.putString(strOut,Charset.forName("utf-8").newEncoder()); buf.flip(); out.write(buf); } }
这样基本没神马问题,如有问题我会继续补充
- Apache_Mina_Server_2.0中文参考手册V1.0.pdf (409.7 KB)
- 下载次数: 2
发表评论
-
java ssl (转载)
2014-12-25 17:50 785某项目的业务系统要求 ... -
table
2014-05-27 00:13 763table ... -
java 删除目录
2013-08-01 21:45 834import java.io.File; pub ... -
负载均衡方法
2013-06-05 22:26 1051•随机:负载均衡方法 ... -
&#x 格式数据转换
2013-05-22 11:52 3064import java.io.UnsupportedEnc ... -
Java数据库连接
2012-11-22 10:42 804Java数据库连接(JDBC)由一组用 Java 编程语言编写 ... -
http post
2012-10-31 11:51 898package test.net; import ... -
Java proxy 代理访问网络(转)
2012-10-31 10:12 1454How to make your Java applicati ... -
java版mini编辑器
2012-10-11 15:40 840习惯用Editplus来查看源代码,但是没有代码导航功能,想看 ... -
java excel 导入
2011-12-16 18:04 2192import java.io.FileNotFoundExce ... -
excel 导入
2011-12-16 18:03 1040package *.*; import java.uti ... -
EVAL_BODY_INCLUDE
2011-08-09 10:19 1358EVAL_BODY_INCLUDE:把Body读入存在的输出流 ... -
jrebel的使用
2011-07-06 18:21 939-noverify -javaagent:E:\jrebe ... -
java 实现windows资源管理器
2011-06-27 00:00 2128最近在使用linux的界面,有时候觉得界面很难用,不如wind ... -
Linux下java环境变量设置的完整步骤
2010-10-29 13:32 952从java.sun.com上下载JDK的安装文件,一般是jdk ... -
设置头部,直接下载文件
2010-09-26 10:34 1002string dir = SysSetting.Wave ... -
java 地图查看器
2010-07-25 23:07 1160/** * @(#)GisApp.java * ... -
中国移动 联通 电信 模拟网关服务器
2010-03-29 21:55 1950/Files/hcmfys/SngServer.rar -
basic64
2010-02-09 14:29 1727using System; using System. ... -
JAVA 复制 带进度条 时间 百分比
2008-05-22 09:27 2293写得不太好。如果喜欢就下载/** * @(#)Jprogr ...
相关推荐
返json数据包示例,可以直接使用,只需要根据自身业务逻辑修改部分业务代码即可
附件内容为:Java组装map数据,然后转换为json数据格式;Java解析json数据
java 解析 json文件java 解析 json文件java 解析 json文件java 解析 json文件java 解析 json文件
java获取网络json数据包和解析json数据完整案例。 需要用到json.org也包含在里边。
主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了java RAS加密解密算法的相关实现技巧,需要的朋友可以参考下
java调用json参数的webservice 涉及技术: JAVA JSON WEBSERVICE
学习java解析json所需要的jar文件,包括commons-beanutils-1.8.3.jar、commons-collections-3.2.1.jar、commons-lang-2.5.jar、commons-logging-1.2.jar、ezmorph-1.0.6.jar、json-lib-2.4-jdk15.jar
里面包含jsonlib,fastjson,gson三个完整包,对于学习爱好者挺方便的,比较完整
java服务端生成json(json服务端),可以在浏览器上访问获取查看json,已测试通过
Java递归算法构造JSON树形结构,Java递归算法构造JSON树形结构Java递归算法构造JSON树形结构
java及j2ee开发中常需要将对象转成json字符串进行数据传输,该包提供了JAVA对象和json字符串之间的转换方法。常见的类有JSONObject等
使用Java操作JSON字符串对象,使用Java操作JSON字符串对象
河南省市区县JSON数据包(176个文件,含18地级市,以及县市辖区),echarts geo 专用,如有需要其他省份数据下载地址:http://datav.aliyun.com/tools/atlas/ 一个一个下载整理。
四级六级专八考研英语JSON数据包
此压缩包包含两个jar:json-lib-2.4-jdk15.jar和ezmorph-1.0.6.jar 这两个包都是java解析json数据的依赖包,而且是最新版,开源的东东好多人还要分,俺不要分,只希望对你有用。
echarts实现地图以地名命名的河南省各地市区县JSON数据包
2021最全身份证前6位匹配所在省市县JSON数据包
Java 操作json文件的例子,对json数据进行读娶添加、删除、修改等操作,下载源码后,重点参见JsonConvert.java文件, 读取nameID.txt文件中的NAMEID字段(key)对应值(value)并存储,读取NAMEID对应值,读取原始...
JSON官网上推荐的使用java解析json的类库,官网下载后的是未编译打包的java文件,这是我打包后的东东,使用时直接添加进Build path即可,简单实用……
省市县三级联动函数+全国行政区划json数据包, 只有一个函数哦,下拉列表格式的,简洁美,有问题发邮件给我,使用方法见注释以及demo