`

mina2.x与spring的集成开发

    博客分类:
  • MINA
 
阅读更多

1、下载相应的开发包http://mina.apache.org/,MINA2.0版本包含了spring开发包,还需下载其他相关包,我的工程用到的包如下图:

 

 

2、配置spring的applicationContext.xml,配置mina服务;

 

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <beans xmlns="http://www.springframework.org/schema/beans"   
  4.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.        xmlns:aop="http://www.springframework.org/schema/aop"   
  6.        xmlns:tx="http://www.springframework.org/schema/tx"   
  7.        xsi:schemaLocation="http://www.springframework.org/schema/beans   
  8.        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
  9.        http://www.springframework.org/schema/aop   
  10.        http://www.springframework.org/schema/aop/spring-aop-2.5.xsd   
  11.        http://www.springframework.org/schema/tx   
  12.        http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  
  13.   
  14.     <!-- mina server -->  
  15.     <bean id="serverHandler" class="com.supconit.its.server.handler.ServerHandler" />  
  16.       
  17.     <!-- executorFilter多线程处理 -->  
  18.     <bean id="executorFilter" class="org.apache.mina.filter.executor.ExecutorFilter" />  
  19.       
  20.     <bean id="mdcInjectionFilter" class="org.apache.mina.filter.logging.MdcInjectionFilter">  
  21.         <constructor-arg value="remoteAddress" />  
  22.     </bean>  
  23.       
  24.     <bean id="codecFilter" class="org.apache.mina.filter.codec.ProtocolCodecFilter">  
  25.         <constructor-arg>  
  26.         <!-- <bean class="org.apache.mina.filter.codec.textline.TextLineCodecFactory" />-->  
  27.         <!-- 处理对象流时候用ObjectSerializationCodecFactory -->  
  28.         <!-- <bean class="org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory" /> -->  
  29.             <bean class="com.supconit.its.server.handler.ServerCodeFactory" />  
  30.         </constructor-arg>  
  31.     </bean>  
  32.       
  33.     <bean id="loggingFilter" class="org.apache.mina.filter.logging.LoggingFilter" />  
  34.       
  35.     <bean id="filterChainBuilder" class="org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder">  
  36.         <property name="filters">  
  37.             <map>  
  38.                 <entry key="executor" value-ref="executorFilter" />  
  39.                 <entry key="mdcInjectionFilter" value-ref="mdcInjectionFilter" />  
  40.                 <entry key="codecFilter" value-ref="codecFilter" />  
  41.                 <entry key="loggingFilter" value-ref="loggingFilter" />  
  42.             </map>  
  43.         </property>  
  44.     </bean>  
  45.       
  46.     <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">  
  47.         <property name="customEditors">  
  48.             <map>  
  49.                 <entry key="java.net.SocketAddress">  
  50.                     <bean class="org.apache.mina.integration.beans.InetSocketAddressEditor" />  
  51.                 </entry>  
  52.             </map>  
  53.         </property>  
  54.     </bean>  
  55.   
  56.     <bean id="ioAcceptor" class="org.apache.mina.transport.socket.nio.NioSocketAcceptor" init-method="bind" destroy-method="unbind">  
  57.         <property name="defaultLocalAddress" value=":1235" />  
  58.         <property name="handler" ref="serverHandler" />  
  59.         <property name="filterChainBuilder" ref="filterChainBuilder" />  
  60.         <property name="reuseAddress" value="true" />  
  61.     </bean>  

3、ServerHandler实现类

  1. package com.supconit.its.server.handler;  
  2.   
  3. import java.net.InetSocketAddress;  
  4. import java.util.Collections;  
  5. import java.util.Date;  
  6. import java.util.HashSet;  
  7. import java.util.Set;  
  8.   
  9. import org.apache.log4j.Logger;  
  10. import org.apache.mina.core.service.IoHandlerAdapter;  
  11. import org.apache.mina.core.session.IdleStatus;  
  12. import org.apache.mina.core.session.IoSession;  
  13.   
  14.   
  15. public class ServerHandler extends IoHandlerAdapter {  
  16.   
  17.     private final int IDLE = 300;  
  18.       
  19.      //private final Logger log = LoggerFactory .getLogger(HandlerTwo.class);  
  20.      private final Logger log = Logger.getLogger(ServerHandler.class.getName());  
  21.   
  22.      public static Set<IoSession> sessions = Collections .synchronizedSet(new HashSet<IoSession>());  
  23.        
  24.     /** 
  25.      *  
  26.      */  
  27.     public ServerHandler(){  
  28.           
  29.     }  
  30.   
  31.     @Override  
  32.     public void exceptionCaught(IoSession session, Throwable cause)  
  33.             throws Exception {  
  34.         session.close();  
  35.         //log.debug("session occured exception, so close it.");  
  36.         log.debug("session occured exception, so close it." + cause.getMessage());  
  37.     }  
  38.       
  39.     @Override  
  40.     public void sessionCreated(IoSession session) {  
  41.         //   
  42.         log.debug("remote client ["+session.getRemoteAddress().toString()+"] connected.");  
  43.         session.write("Welcome");  
  44.         sessions.add(session);  
  45.     }  
  46.       
  47.     @Override  
  48.     public void messageReceived(IoSession session, Object message)  
  49.             throws Exception {  
  50.         String str = message.toString();  
  51.         log.debug("Message written..." + str);  
  52.         log.debug("客户端"+((InetSocketAddress) session.getRemoteAddress()).getAddress().getHostAddress()+"连接成功!");  
  53.         /*if (str.trim().equalsIgnoreCase("quit")) { 
  54.             session.close();//  
  55.             return; 
  56.         }*/  
  57.         //Date date = new Date();  
  58.         //session.write(date.toString());//   
  59.         //session.setAttribute(remoteAddress, message);  
  60.           
  61.         session.setAttribute("type", message);  
  62.         String remoteAddress = ((InetSocketAddress) session.getRemoteAddress()).getAddress().getHostAddress();  
  63.         session.setAttribute("ip", remoteAddress);  
  64.           
  65.     }  
  66.   
  67.     @Override  
  68.     public void sessionClosed(IoSession session) throws Exception {  
  69.          log.debug("sessionClosed.");  
  70.         sessions.remove(session);  
  71.     }  
  72.   
  73.     @Override  
  74.     public void sessionIdle(IoSession session, IdleStatus status)  
  75.             throws Exception {  
  76.         log.debug("session idle, so disconnecting......");  
  77.         session.close();  
  78.         log.debug("disconnected.");  
  79.     }  
  80.       
  81.     //   
  82.     @Override  
  83.     public void messageSent(IoSession session, Object message) throws Exception {  
  84.          log.debug("messageSent.");  
  85.         // disconnect an idle client  
  86.         //session.close();  
  87.     }  
  88.       
  89.     @Override  
  90.     public void sessionOpened(IoSession session) throws Exception {  
  91.         log.debug("sessionOpened.");  
  92.         //  
  93.         session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, IDLE);  
  94.     }  
  95.   
  96. }  

4、过滤器ServerCodeFactory

  1. package com.supconit.its.server.handler;  
  2.   
  3. import java.nio.charset.Charset;  
  4.   
  5. import org.apache.mina.core.session.IoSession;  
  6. import org.apache.mina.filter.codec.ProtocolCodecFactory;  
  7. import org.apache.mina.filter.codec.ProtocolDecoder;  
  8. import org.apache.mina.filter.codec.ProtocolEncoder;  
  9. import org.apache.mina.filter.codec.textline.LineDelimiter;  
  10. import org.apache.mina.filter.codec.textline.TextLineDecoder;  
  11. import org.apache.mina.filter.codec.textline.TextLineEncoder;  
  12.   
  13. public  class ServerCodeFactory implements ProtocolCodecFactory {  
  14.   
  15.         private final TextLineEncoder encoder;  
  16.         private final TextLineDecoder decoder;  
  17.         /*final static char endchar = 0x1a;*/  
  18.         final static char endchar = 0x0d;  
  19.         public ServerCodeFactory() {  
  20.             this(Charset.forName("gb2312"));  
  21.         }  
  22.         public ServerCodeFactory(Charset charset) {  
  23.              encoder = new TextLineEncoder(charset, LineDelimiter.UNIX);     
  24.              decoder = new TextLineDecoder(charset, LineDelimiter.AUTO);     
  25.              }  
  26.   
  27.         @Override  
  28.         public ProtocolDecoder getDecoder(IoSession session) throws Exception {  
  29.             // TODO Auto-generated method stub  
  30.             return decoder;  
  31.         }  
  32.         @Override  
  33.         public ProtocolEncoder getEncoder(IoSession session) throws Exception {  
  34.             // TODO Auto-generated method stub  
  35.             return encoder;  
  36.         }  
  37.         public int getEncoderMaxLineLength() {  
  38.             return encoder.getMaxLineLength();  
  39.         }  
  40.         public void setEncoderMaxLineLength(int maxLineLength) {  
  41.             encoder.setMaxLineLength(maxLineLength);  
  42.         }  
  43.         public int getDecoderMaxLineLength() {  
  44.             return decoder.getMaxLineLength();  
  45.         }  
  46.         public void setDecoderMaxLineLength(int maxLineLength) {  
  47.             decoder.setMaxLineLength(maxLineLength);  
  48.         }  
  49.   
  50. }  

5、启动spring+mina socket server;

  1. package com.supconit.its.server.test;  
  2.   
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  4.   
  5. public class Test {  
  6.   
  7.     /** 
  8.      * @param args 
  9.      */  
  10.     public static void main(String[] args) {  
  11.         ClassPathXmlApplicationContext ct =    new ClassPathXmlApplicationContext("applicationContext.xml");     
  12.   
  13.     }  
  14.   
  15. }  

6、客户端测试ClintTest

  1. package com.supconit.its.server.test;  
  2.   
  3. import java.net.InetSocketAddress;  
  4. import java.nio.charset.Charset;  
  5.   
  6. import org.apache.mina.core.future.ConnectFuture;  
  7. import org.apache.mina.filter.codec.ProtocolCodecFilter;  
  8. import org.apache.mina.filter.codec.textline.TextLineCodecFactory;  
  9. import org.apache.mina.filter.logging.LoggingFilter;  
  10. import org.apache.mina.transport.socket.nio.NioSocketConnector;  
  11.   
  12. import com.supconit.its.server.handler.ServerHandler;  
  13.   
  14.   
  15.   
  16. public class ClintTest {  
  17.   
  18.     /** 
  19.      * @param args 
  20.      */  
  21.     public static void main(String[] args) {  
  22.         NioSocketConnector connector = new NioSocketConnector();   
  23.         connector.getFilterChain().addLast( "logger"new LoggingFilter() );   
  24.         //connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "GBK" )))); //  
  25.         connector.getFilterChain().addLast( "codec"new ProtocolCodecFilter( new TextLineCodecFactory( )));   
  26.         connector.setConnectTimeout(1);   
  27.         connector.setHandler(new ServerHandler());//  
  28.         ConnectFuture cf = connector.connect(   
  29.         new InetSocketAddress("127.0.0.1"1235));//  
  30.         cf.awaitUninterruptibly();//  
  31.         cf.getSession().write("hello,测试!");//  
  32.         //cf.getSession().write("quit");//  
  33.         cf.getSession().close();  
  34.         cf.getSession().getCloseFuture().awaitUninterruptibly();//  
  35.         connector.dispose();   
  36.   
  37.     }  
  38.   
  39. }  

分享到:
评论

相关推荐

    mina2.x开发示例

    参见博客: http://blog.csdn.net/joe_storm/article/details/11041763

    apache mina-spring 服务端程序

    这是一个基于spring mina 的服务端整合框架

    mina2+spring结合实例

    mina2+spring结合实例

    SSI+Mina2(Struts2+Spring4+Mybatis3+Mina2)集成发布就可运行

    SSI+Mina2(Struts2+Spring4+Mybatis3+Mina2)集成,都是最新的包, 发布就可运行,配置文件都写了详细的注释。

    MinaDemo.zip SpringBoot集成Socket通讯

    集成框架SpringBoot+myBatis+Mina,内附CRC校验工具类和进制转换工具类 SpringBoot集成Socket通讯之Mina框架

    Mina+Struts2+Spring4+Mybatis3组合

    该项目是本人真实项目中使用到的mina + spring+struts2 + mybatis框架,里面有详细的注释说明,以及一个完整的接收消息、入库、返回例子。对需要真实项目开发的人员来说,可以直接使用。 另外,如果需要更加详细的...

    mina 与spring的结合开发,包头指令

    mina 与spring的结合开发 ,mina 学习,spring 学习,

    mina2核心框架

    mina2核心框架5000个并发

    spring boot 整合mina 串口

    找了很长时间网上没有一个详细整合的例子,现在已整合成功 放上来让大家参照,少走弯路,稍后会放出博客说明 使用idea 打开后可以直接使用的例子,很珍贵

    mina函数.xls

    mina函数.xls

    Mina例子包含与spring整合

    apahce的MINA例子,包含了与spring的整合

    Mina-Spring-Hibernate.rar_mina_mina hibernate_spring mina

    一个mina跟Spring、Hibernate整合的说明文档,挺好的,有需要的可以看看

    mina中文开发手册.pdf

    Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP 协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),...Mina 主要有1.x 和2.x 两个分支…………

    mina2.0+spring

    2.系统读取mina-spring.xml。如果想把该工程导成jar则需要处理下配置文件的路径 3.结合自己系统时(导成jar集成进自己系统)需要继承与serverHandler,实现里面doService方法 4.本系统支持HTTP以及TCP链接,这个是...

    基于java的开发源码-mina高性能Java网络框架.zip

    基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发...

    Apache Mina Demo.zip

    本工程用于研究Apache Mina技术 本工程编码方式:UTF-8 本工程开发工具:MyEclipse 本工程运行步骤: 1、运行StartMinaServer类 2、运行StartMinaClient类

    基于spring的Mina框架

    简单的基于spring的mina 框架,可以用来做tcp网络连接。

    mina core 包

    org.apache.mina.core.buffer.IoBuffer mina core 包

    Apache-Mina教程.pdf

    mina框架介绍、主要接口介绍:IoService、IoAcceptor、IoConnector、IoSession、IoSessionConfig、IoHandler、IoBuffer、IoFuture等;信息分段处理demo、多路分离编解码demo、与Spring/JMX集成示例

    Apache-Mina-Server-2.0中文参考手册V1.0.docx

    Mina 主要有 1.x 和 2.x 两个分支,这里我们讲解最新版本 2.0,如果你使用的是 Mina 1.x,那么可能会有一些功能并不适用。学习本文档,需要你已掌握 JAVA IO、JAVA NIO、JAVA Socket、JAVA 线程及并发库(java.util....

Global site tag (gtag.js) - Google Analytics