- 浏览: 357464 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
tianshawang:
楼主你好偏心啊,把代码给谷歌不给这里
java 实现windows资源管理器 -
tianshawang:
其实我是也想要资源管理器的代码来的。。
java 实现windows资源管理器 -
hcmfys:
lonuery 写道open file 是获取要进行复制的文件 ...
JAVA 复制 带进度条 时间 百分比 -
qq657052171:
怎么没有代码呢?
java 实现windows资源管理器 -
IT女民工:
楼主,求资源管理器代码~~~~
java 实现windows资源管理器
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 829某项目的业务系统要求 ... -
table
2014-05-27 00:13 806table ... -
java 删除目录
2013-08-01 21:45 880import java.io.File; pub ... -
负载均衡方法
2013-06-05 22:26 1082•随机:负载均衡方法 ... -
&#x 格式数据转换
2013-05-22 11:52 3125import java.io.UnsupportedEnc ... -
Java数据库连接
2012-11-22 10:42 846Java数据库连接(JDBC)由一组用 Java 编程语言编写 ... -
http post
2012-10-31 11:51 943package test.net; import ... -
Java proxy 代理访问网络(转)
2012-10-31 10:12 1491How to make your Java applicati ... -
java版mini编辑器
2012-10-11 15:40 876习惯用Editplus来查看源代码,但是没有代码导航功能,想看 ... -
java excel 导入
2011-12-16 18:04 2231import java.io.FileNotFoundExce ... -
excel 导入
2011-12-16 18:03 1095package *.*; import java.uti ... -
EVAL_BODY_INCLUDE
2011-08-09 10:19 1402EVAL_BODY_INCLUDE:把Body读入存在的输出流 ... -
jrebel的使用
2011-07-06 18:21 971-noverify -javaagent:E:\jrebe ... -
java 实现windows资源管理器
2011-06-27 00:00 2172最近在使用linux的界面,有时候觉得界面很难用,不如wind ... -
Linux下java环境变量设置的完整步骤
2010-10-29 13:32 994从java.sun.com上下载JDK的安装文件,一般是jdk ... -
设置头部,直接下载文件
2010-09-26 10:34 1039string dir = SysSetting.Wave ... -
java 地图查看器
2010-07-25 23:07 1200/** * @(#)GisApp.java * ... -
中国移动 联通 电信 模拟网关服务器
2010-03-29 21:55 2000/Files/hcmfys/SngServer.rar -
basic64
2010-02-09 14:29 1770using System; using System. ... -
JAVA 复制 带进度条 时间 百分比
2008-05-22 09:27 2342写得不太好。如果喜欢就下载/** * @(#)Jprogr ...
相关推荐
JSON数据包通常包含了库和工具,使得开发者能够方便地在Java环境中处理JSON。 在你提到的压缩包中,包括了`jsonlib`, `fastjson`, 和 `gson`这三个流行的Java JSON库。接下来,我们将详细探讨这三个库的特点和使用...
本示例聚焦于“返json数据包接口”,我们将深入探讨如何在.NET环境中创建这样一个接口,并通过具体的代码文件`ApiUinfo.ashx`和`ApiUinfo.ashx.cs`来理解其实现细节。 首先,`ApiUinfo.ashx`文件通常代表一个HTTP...
附件内容为:Java组装map数据,然后转换为json数据格式;Java解析json数据
Java实现的RSA加密解密算法示例 本文主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了Java RSA加密解密算法的相关实现技巧。 知识点1:RSA加密解密算法简介 RSA加密解密算法是一种非对称加密算法,由Ron...
河南省市区县JSON数据包(176个文件,含18地级市,以及县市辖区),echarts geo 专用,如有需要其他省份数据下载地址:http://datav.aliyun.com/tools/atlas/ 一个一个下载整理。
在给定的压缩包文件“echarts实现地图以地名命名的河南省各地市区县JSON数据包.zip”中,包含的资源是用于在ECharts中展示河南省地图的关键数据。 地图可视化通常需要特定的地理信息数据,这些数据以JSON格式存储,...
可能包含的方法有`toJson()`(将Java对象转换为JSON字符串)、`fromJson()`(将JSON字符串解析为Java对象)、`convertToMap()`(将JSON字符串转换为Map)以及`convertToList()`(将JSON字符串转换为List)等。...
Java解析JSON文件是Java开发中常见的一项任务,特别是在与Web服务交互或处理API响应时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁和易于阅读及编写的特点,被广泛应用于网络数据传输...
在Java编程语言以及基于J2EE的企业级应用开发中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式。它易于人阅读和编写,同时也容易让机器解析和生成。JSON包在Java中扮演着至关重要的角色,...
Java服务端生成JSON是Web应用开发中的常见任务,主要用于数据交换。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java中,我们可以使用多种库来...
这些数据通常是JSON格式,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在这个文件中,全国的省、市、县(区)的行政信息被组织成键值对的形式,...
存在一些专门用于Java和.NET之间互操作的库,如protobuf、JSON等,它们可以帮助转换加密后的数据。此外,可以使用HTTP/HTTPS作为传输层,利用SSL/TLS提供端到端的安全通信。 9. **代码示例**: 提供的`.txt`文件...
Java解析JSON是一个常见的任务,特别是在开发Web服务或者与API交互时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java中,我们可以使用多种库...
在探讨Java调用带有JSON参数的WebService之前,我们首先需要了解几个关键的技术概念:Java、JSON以及WebService。 Java是一种广泛使用的编程语言,它具有面向对象、跨平台、多线程以及健壮性等特点。Java在企业级...
学习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
在给定的压缩包文件中,"echart地图资源json数据包,包含全国各省各市",意味着这个数据包提供了ECharts用于绘制中国地图的JSON数据。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读...
使用Java操作JSON字符串对象,使用Java操作JSON字符串对象
Java 递归算法构造 JSON 树形结构 Java 递归算法构造 JSON 树形结构是指通过 Java 语言使用递归算法将数据库中的菜单表构建成树形的 JSON 格式发送给第三方。这种方法可以将复杂的树形结构数据转换成易于理解和处理...
在Java编程中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人和机器都能轻易地阅读和编写。JSON格式基于JavaScript的一个子集,但与语言无关,因此在各种编程语言中,包括Java,都有广泛...
在解析和操作JSON时,这个库能提供更多的数据结构和算法,有助于更高效地处理JSON数据。 5. **commons-beanutils-1.7.0.jar**:Apache Commons BeanUtils库简化了Java Bean的属性操作,提供了一种简单的机制来获取...