- 浏览: 67983 次
- 性别:
- 来自: 绍兴
最新评论
首先定义自定义过滤器
KaiComCodecFactory.java
KaiComDecoder.jar
KaiComEncoder.java
配置监听地址和端口
配置监听事件
MinaServerHandler.java
<bean id="codecFilter" class="org.apache.mina.filter.codec.ProtocolCodecFilter"> <constructor-arg> <!--编码过滤器--> <bean class="com.kcb.common.socket.kaicom.KaiComCodecFactory"></bean> </constructor-arg> </bean> <bean id="filterChainBuilder" class="org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder"> <property name="filters"> <map> <entry key="codecFilter" value-ref="codecFilter" /> </map> </property> </bean>
KaiComCodecFactory.java
public class KaiComCodecFactory implements ProtocolCodecFactory{ private final KaiComDecoder decoder; private final KaiComEncoder encoder; @Override public ProtocolEncoder getEncoder(IoSession session) throws Exception { // TODO Auto-generated method stub return encoder; } @Override public ProtocolDecoder getDecoder(IoSession session) throws Exception { // TODO Auto-generated method stub return decoder; } public KaiComCodecFactory() { decoder = new KaiComDecoder(); encoder = new KaiComEncoder(); } }
KaiComDecoder.jar
public class KaiComDecoder implements ProtocolDecoder { private final Charset charset; private int bufferLength = 128; public KaiComDecoder(Charset charset) { if (charset == null) { throw new IllegalArgumentException("charset parameter shuld not be null"); } this.charset = charset; // Convert delimiter to ByteBuffer if not done yet. } public KaiComDecoder() { this.charset = Charset.forName("UTF-8"); // Convert delimiter to ByteBuffer if not done yet. } @Override public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { String str = ioBufferToString(in); if(str != null){ String[] list = str.split("\\|"); if(list.length>1){//判断自定义协议 if(list[1].compareToIgnoreCase("98") == 0||list[1].compareToIgnoreCase("01") == 0){ writeText(session, str, out); return; } } } } public static String ioBufferToString(Object message) { if (!(message instanceof IoBuffer)) { return ""; } IoBuffer ioBuffer = (IoBuffer) message; byte[] b = new byte [ioBuffer.limit()]; ioBuffer.get(b); StringBuffer stringBuffer = new StringBuffer(); for (int i = 0; i < b.length; i++) { stringBuffer.append((char) b [i]); } return stringBuffer.toString(); } @Override public void finishDecode(IoSession session, ProtocolDecoderOutput out) throws Exception { // TODO Auto-generated method stub InetSocketAddress isa = (InetSocketAddress) session.getRemoteAddress(); System.out.println("客户端:" + isa.getAddress().getHostAddress() + ":" + isa.getPort() + "连接关闭了!"); } @Override public void dispose(IoSession session) throws Exception { // TODO Auto-generated method stub } protected void writeText(IoSession session, String text, ProtocolDecoderOutput out) { out.write(text); }
KaiComEncoder.java
public class KaiComEncoder extends ProtocolEncoderAdapter { @Override public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception { // TODO Auto-generated method stub out.write(stringToIoBuffer(message.toString())); } public static IoBuffer stringToIoBuffer(String str) { byte bt[] = str.getBytes(); IoBuffer ioBuffer = IoBuffer.allocate(bt.length); ioBuffer.put(bt, 0, bt.length); ioBuffer.flip(); return ioBuffer; } }
配置监听地址和端口
<!-- 指定服务端地址和端口 --> <bean id="address" class="java.net.InetSocketAddress"> <constructor-arg index="0" value="125.118.54.228" /> <constructor-arg index="1" value="6889}" /> </bean>
配置监听事件
<!-- 这里是那个自定义的类 --> <bean id="someServer" class="com.kcb.common.socket.action.SomeServer"></bean> <!-- 自定义的serverHandler --> <bean id="serverHandler" class="com.kcb.common.socket.server.MinaServerHandler"> <property name="someServer" ref="someServer"></property> </bean>
MinaServerHandler.java
public class MinaServerHandler extends IoHandlerAdapter { private SomeServer someServer; public void setSomeServer(SomeServer someServer) { this.someServer = someServer; } @Override public void exceptionCaught(IoSession session, Throwable cause) { try { System.out.println("客户端 " + session.getRemoteAddress() + " 关闭了连接"); } catch (Exception e) { // TODO: handle exception } } /** * 服务端接收消息 */ @Override public void messageReceived(IoSession session, Object message) throws Exception { int result = someServer.doSome(message); String msg = message.toString(); if ("quit".equals(msg)) { session.close(false); return; } // 对客户端做出的响应 // 正常收到回复 OK_RECV // 接收失败 OK_ERROR String response = "OK_RECV"; if(result==-1){ response = "OK_ERROR"; } session.write(response); } /** * 客户端连接的会话创建 */ @Override public void sessionCreated(IoSession session) throws Exception { InetSocketAddress isa = (InetSocketAddress) session.getRemoteAddress(); System.out.println("客户端:" + isa.getAddress().getHostAddress() + ":" + isa.getPort() + "连接进来了。"); //sessions.put(session.getRemoteAddress().toString(), session); } }
发表评论
-
Web开发学习13聊聊java反射
2016-07-12 18:41 724很喜欢一本叫《走出软件作坊》的书,其中有一句话让我较为深刻,“ ... -
Web开发学习12 浅谈设计模式
2016-07-01 13:33 1289在我刚接触 ... -
Web开发学习11 全局缓存控制
2015-10-12 14:27 709缓存用的好可以减少数据库的压力,在大并发的情况下极大的提升服务 ... -
Web开发学习10 hadoop实战
2015-10-09 14:02 703前一篇说到项目记录了很多埋点日志,当有一天项目需求需要对这些日 ... -
Web开发学习(9)全局埋点
2015-07-27 11:10 1967埋点的作用是把客户端每次访问服务端的操作记录下来,包括请求连接 ... -
Web开发学习8Struts2基类封装
2015-07-24 12:03 671一个好的基类可以帮助开发者减少很多开发工作,像我这种爱偷懒的人 ... -
Web开发学习7按钮级别权限控制
2015-07-23 16:21 13259这个功能的思路是自己原创的,没看过其他例子,其实是在做之前网上 ... -
Web开发学习6添加liqiubase
2015-07-22 14:29 1411开发过程中经常碰到数据库更改的情况,在日常环境下如果每位开发人 ... -
浅列JavaEnum
2014-01-05 16:42 751enum Province{ ZHEJIANG,SHANGHA ... -
maven常用命令
2013-07-08 10:20 7541、创建普通Java项目: ... -
canvas绘制科赫雪花
2012-12-20 17:24 2113<html> <head> ... -
html5 audio与video方法属性事件概括
2012-12-20 14:46 1067play() 继续播放 pause() ... -
Web开发学习(5)添加springsecurity应用
2011-12-14 15:00 927我学习公司这个架构多半就是为了把springsecurity搞 ... -
Web开发学习(4)添加spring应用
2011-12-14 14:45 766印象中似乎没做过不用spring的项目,因为它在web开发中的 ... -
Web开发学习(3)配置struts-tiles插件(附带json插件)
2011-12-05 15:22 2524struts的tiles插件是非常实用的,从某些方面可以很好的 ... -
使用线程删除导出临时文件
2011-12-01 16:33 2224项目支持大数据量导出e ... -
jQuery实现表格行点击选中复选框
2011-11-23 12:36 5952这个需求是在项目完成后客户提出的要求,看似简单但是还需要一点小 ... -
Web开发学习(2)配置convention插件
2011-11-04 10:28 1352注解的方式某些程度上能减少xml的配置量,个人感觉使程序更加清 ... -
Web开发学习(1)使用eclipse搭建maven项目
2011-10-20 10:04 5698首先用eclipse创建工程 ne ... -
数据库连接泛型基类创建
2011-06-30 11:49 956记录 以便以后参考---- 基类代码 public cl ...
相关推荐
一个简单的spring整合mina实例。分别介绍了TCP和UDP的用法。同时与Spring4.1.X进行了整合。 useage Tcp:首先运行HelloTcpServer,接着在运行HelloTcpClient。在HelloTcpClient的控制台输入消息内容,观察服务端返回...
mina2+spring结合实例
找了很长时间网上没有一个详细整合的例子,现在已整合成功 放上来让大家参照,少走弯路,稍后会放出博客说明 使用idea 打开后可以直接使用的例子,很珍贵
spring结合Mina的配置文件,设计到spring构造 属性编辑器
springboot 深度整合mina开箱即用,适合新手上来研究。希望下载过的同学能来评论。
之前的项目需要用到mina,实现的功能主要是:服务端主动发送消息到客户端,这个的服务端为外网的...当然,我这里的服务端是整合的了spring 的,也可以直接把服务端独立出来,不整合spring,这个都一样,区别不大。
apahce的MINA例子,包含了与spring的整合
这是一个基于spring mina 的服务端整合框架
Spring整合Mina架包
该项目是本人真实项目中使用到的mina + spring+struts2 + mybatis框架,里面有详细的注释说明,以及一个完整的接收消息、入库、返回例子。对需要真实项目开发的人员来说,可以直接使用。 另外,如果需要更加详细的...
Spring-mybaits-mina三大框架的整合,mina可以使用Spring的数据库数据库连接池,无需额外定义mybaits连接池。
此demo利用springmvc整合mina,实现客户端主动发送消息到服务端,并且以http接口的方式实现,亲测可用。
1:Spring-mybaits-mina三大框架的整合,mina可以使用Spring的数据库数据库连接池,无需额外定义mybaits连接池。 2:mina可以自定义监听一个或者多个端口,可以从数据库中读取
springboot 整合了mina 并自定义解码器 复制进去导个包即可食用
一个mina跟Spring、Hibernate整合的说明文档,挺好的,有需要的可以看看
springboot 整合mian框架tcp通讯源码, 适合初学者另附java nio及mina相关教程
本篇文章主要介绍了详解spring集成mina实现服务端主动推送(包含心跳检测),具有一定的参考价值,与兴趣的可以了解一下
这个是个简单的例子,使用mina作为服务端处理客户端断网,断电。如果需要整合到spring里面也是可以的,不会的可以私信我。
1.1.jar,log4j-1.2.14.jar,mina-core-2.0.7.jar,mssqlserver2.jar,msv-core-2011.1.jar,neethi-3.0.2.jar,oauth-20100527.jar,oauth-provider-20100527.jar,opensaml-2.5.1-1.jar,openws-1.4.2-1.jar,...
基于Spring Boot +mina或netty即时通讯聊天系统源码.zip 完整源码,可运行 基于mina或netty框架下的推送系统,或许有一些企业有着自己一套即时通讯系统的需求,那么CIM为您提供了一个解决方案,目前CIM支持websocket...