`
wj131
  • 浏览: 143614 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

mina1.7结合spring的应用

    博客分类:
  • mina
阅读更多

虽然说 mina已经发布了2.0的版本了。但是1.7还是应用很多。mina通过spring的配置,使用起来就更加的简单了

 

现在 先看mina在spring中的配置:

 

本次练习中是监听2个端口

applicationContext-mina.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

 

 <bean
  class="org.springframework.beans.factory.config.CustomEditorConfigurer">
  <property name="customEditors">
   <map>
    <entry key="java.net.SocketAddress">
     <bean
      class="org.apache.mina.integration.spring.InetSocketAddressEditor" />
    </entry>
   </map>
  </property>
 </bean>

 

 

<!--创建服务器-->

 <bean id="ioAcceptor"
  class="org.apache.mina.integration.spring.IoAcceptorFactoryBean">
  <property name="target">
   <bean
    class="org.apache.mina.transport.socket.nio.SocketAcceptor" />
  </property>
  <property name="bindings">
   <list>//这里是个list 里面可以创建多个监听
    <bean
     class="org.apache.mina.integration.spring.Binding">
     <property name="address" value=":8888" />//监听端口:8888
     <property name="handler" ref="SampleHandler" />//SampleHandler:定义服务器的handler
     <property name="serviceConfig">
      <bean
       class="org.apache.mina.transport.socket.nio.SocketAcceptorConfig">
       <property name="filterChainBuilder"//配置filter
        ref="filterChainBuilder" />//指向:filterChainBuilder
       <property name="reuseAddress" value="true" />
      </bean>
     </property>
    </bean>
    
    <bean
     class="org.apache.mina.integration.spring.Binding">
     <property name="address" value=":9999" />//第二个监听端口:9999
     <property name="handler" ref="bossSampleHandler" />//监听该端口的 handler
     <property name="serviceConfig">
      <bean
       class="org.apache.mina.transport.socket.nio.SocketAcceptorConfig">
       <property name="filterChainBuilder"
        ref="filterChainBuilder" />
       <property name="reuseAddress" value="true" />
      </bean>
     </property>
    </bean>
    
   </list>
  </property>
 </bean>
 <bean id="SampleHandler" class="cn.org.handler.HandlerTwo" />

 <bean id="bossSampleHandler" class="cn.org.handler.HandlerOne" />

 

//定义filter
 <bean id="filterChainBuilder"
  class="org.apache.mina.integration.spring.DefaultIoFilterChainBuilderFactoryBean">
  <property name="filters">
   <list>
    <bean
     class="org.apache.mina.filter.codec.ProtocolCodecFilter">
     <constructor-arg>
        <bean
       class="org.apache.mina.filter.codec.textline.TextLineCodecFactory" /> //这个是编码格式filter
     </constructor-arg>
    </bean>
    <bean class="org.apache.mina.filter.LoggingFilter" />//日志的filter
   </list>
  </property>
 </bean>
</beans>

 

 

sprng的简单配置文件就是这样:

 

然后看 handler:

 

 

SampleHandler 和 bossSampleHandler 。我写的都是一样的:

 

package cn.org.handler;

import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;

public class HandlerOne extends IoHandlerAdapter {

 public HandlerOne() {
  // TODO Auto-generated constructor stub
 }

 @Override
 public void exceptionCaught(IoSession session, Throwable cause)
   throws Exception {

 }

 @Override
 public void messageReceived(IoSession session, Object message)
   throws Exception {
  // TODO Auto-generated method stub
  System.out.println("收到信息");
  System.out.println("message :"+message.toString());
 }

 @Override
 public void messageSent(IoSession session, Object message) throws Exception {
      System.out.println("小心发送");
 }

 @Override
 public void sessionClosed(IoSession session) throws Exception {
  // TODO Auto-generated method stub
  super.sessionClosed(session);
 }

 @Override
 public void sessionCreated(IoSession session) throws Exception {
  System.out.println(session.getRemoteAddress().toString() +"---create");

 }

 @Override
 public void sessionIdle(IoSession session, IdleStatus status)
   throws Exception {
               System.out.println(session.getServiceAddress() +"IDS");
 }

 @Override
 public void sessionOpened(IoSession session) throws Exception {
     System.out.println("连接打开:"+session.getLocalAddress());
 }

}

 

 

 

 

现在测试:

 

Test.java

 

public class Test {

 /**
  * @param args
  */
 public static void main(String[] args) {
  ClassPathXmlApplicationContext ct =    new ClassPathXmlApplicationContext("applicationContext-mina.xml");  

 }

}

 

 

控制台打印出:

 

2010-1-16 19:00:51 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing
org.springframework.context.support.ClassPathXmlApplicationContext@4b4333: display name [org.springframework.context.support.ClassPathXmlApplicationContext@4b4333]; startup date [Sat Jan 16 19:00:51 CST 2010]; root of context hierarchy
2010-1-16 19:00:51 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext-mina.xml]
2010-1-16 19:00:51 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@4b4333]:
org.springframework.beans.factory.support.DefaultListableBeanFactory@1975b59
2010-1-16 19:00:52 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in
org.springframework.beans.factory.support.DefaultListableBeanFactory@1975b59: defining beans [org.springframework.beans.factory.config.CustomEditorConfigurer#0,ioAcceptor,SampleHandler,bossSampleHandler,filterChainBuilder]; root of factory hierarchy

表明服务器就已经启动了:

 

 

现在你可以用telent的方式测试。也可以写个客户端的测试类:

 

写了个客户端的测试类:Clint.java

public class Clint {

 /**
  * @param args
  */
 
 final static char end = 0x1a;
 
 public static void main(String[] args) {
     SocketConnector connector = new SocketConnector();
  SocketAddress address = new InetSocketAddress("127.0.0.1", 8888);
  SocketConnectorConfig config = new SocketConnectorConfig();
  config.setConnectTimeout(10);// 秒
  connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "GB2312" )))); //设置编码过滤器 

  connector.getFilterChain().addLast( "logger", new org.apache.mina.filter.LoggingFilter() );

  IoSession session =null;
  ConnectFuture cf = connector.connect(address, new ClintHandler(),
    config);
  cf.join();
  if (cf.isConnected()) {
   session = cf.getSession();
   System.out.println("连接成功");
   session.write("abc");
  }else{
   System.out.println("连接失败!!!");
  }

    }
 }

 

这这个测试类中。我只 连接了端口:8888  。也可以测试连接端口:9999。看下是什么情况

主要是jar包:spring.jar和mina1.7里面的jar包。还有下载slf4j-nop-1.5.2.jar(这个包是日志相关的)

 

分享到:
评论
1 楼 花瓣雨 2013-05-22  
写的非常不错,能否给个完整的demo工程学习一下呢,谢谢了。

相关推荐

    cxf(jax-ws)+spring+hibernate整合包

    spring-expression-3.0.7.RELEASE.jar,spring-hibernate3.jar,spring-jms-3.0.7.RELEASE.jar,spring-tx-3.0.7.RELEASE.jar,spring-web-3.0.7.RELEASE.jar,sqljdbc4.jar,stax2-api-3.1.1.jar,velocity-1.7.jar,WHICH_...

    1.金融风控知识与架构介绍.ipynb

    1.金融风控知识与架构介绍.ipynb

    基于Plecs仿真的全桥PSFB+ZVS技术参数研究与应用案例 电力电子

    内容概要:本文详细探讨了基于Plecs仿真的全桥移相全桥变换器(PSFB)结合副边同步整流(ZVS)的技术参数研究及其应用案例。文章首先介绍了系统的配置,重点在于确保驱动时序对齐以及优化移相角来实现ZVS。接着讨论了同步整流的关键点,即精确控制副边开关管的驱动时序以避免反向导通的问题。随后提供了参数调整的具体方法,如改变变压器匝比、计算合适的电感值以及选择适当的散热材料。最后分享了一些常见的仿真问题解决方案,比如处理震荡尖峰和轻载情况下的ZVS失效。同时推荐了几款实用的仿真工具和相关文献供进一步学习。 适合人群:从事电力电子设计的专业人士,特别是那些希望深入了解PSFB和ZVS技术的研究人员和技术工程师。 使用场景及目标:适用于需要进行高效电源转换设计的场合,旨在帮助读者掌握PSFB和ZVS的工作原理,提高电路性能,降低损耗并优化系统参数。 其他说明:文中提供的代码片段和参数设定均为实际仿真过程中积累的经验,对于初学者来说是非常宝贵的参考资料。此外,还提到了一些常见错误及其解决办法,有助于减少开发过程中的障碍。

    基于指标预测与对比的我国“双一流”高校专利转化潜力研究.zip

    基于指标预测与对比的我国“双一流”高校专利转化潜力研究.zip

    插秧机系统设计.rar

    插秧机系统设计.rar

    二轴五档变速器设计.rar

    二轴五档变速器设计.rar

    Lq2.shx

    拷贝到Auto CAD的Fonts下

    风扇叶片注射模具设计.rar

    风扇叶片注射模具设计.rar

    CQRN-RIS.pdf

    CQRN-RIS

    使用Java自带的界面开发包完成一个简易的登陆注册界面

    使用Java自带的界面开发包完成一个简易的登陆注册界面

    锤式破碎机.rar

    锤式破碎机.rar

    2024工业互联网技术产业创新报告.pdf

    2024工业互联网技术产业创新报告.pdf

    易优我的足迹插件.zip

    易优我的足迹插件.zip

    四旋翼无人机UAV轨迹跟踪PID控制仿真:位置与姿态控制的对比分析及应用 Matlab

    内容概要:本文详细介绍了四旋翼无人机(UAV)轨迹跟踪的PID控制仿真方法及其应用。首先解释了PID控制的基本原理,即通过比例、积分和微分三项参数调整控制量,确保无人机能够精确沿预定路径飞行。接着讨论了无人机的动力学模型,涵盖位置和姿态控制的具体公式。随后,文中展示了如何利用MATLAB进行仿真,包括PID参数的设置与调整,以及具体的代码实现。最后,通过位置三维图像、姿态角度图像和位置误差分析图,直观展现了PID控制的效果。 适合人群:对无人机控制技术和PID控制感兴趣的科研人员、工程师和技术爱好者。 使用场景及目标:适用于希望深入了解无人机飞行控制机制的研究者,特别是那些想通过仿真手段测试不同控制算法效果的人群。目标是提高无人机的飞行稳定性和准确性。 其他说明:文章不仅提供了理论知识,还附有详细的代码示例和仿真结果,便于读者理解和实践。此外,文章还展望了未来可能采用的改进型控制算法,如模糊PID、滑模控制和基于模型预测控制(MPC),为后续研究指明方向。

    X62W万能铣床PLC电器改造设计.rar

    X62W万能铣床PLC电器改造设计.rar

    基于多智能体系统一致性算法的电力系统分布式经济调度策略复现及其实验分析 一致性算法

    内容概要:本文详细介绍了基于多智能体系统一致性算法的电力系统分布式经济调度策略的复现过程。文中首先介绍了电力系统经济调度的重要性和挑战,然后构建了一个由10个发电单元和19个柔性负荷单元组成的多智能体系统模型。接着,通过初始化智能体状态、定义信息交换协议以及应用一致性算法,逐步实现了分布式经济调度。最后,通过Python代码展示了算法的具体实现,并对实验结果进行了详细的分析,验证了该策略的有效性。 适合人群:从事电力系统研究、分布式控制系统开发的研究人员和技术人员,尤其是对多智能体系统和一致性算法感兴趣的学者。 使用场景及目标:适用于电力系统分布式经济调度的研究和开发项目,旨在提高电力系统的效率和稳定性,确保总功率输出能满足总负荷需求并实现经济调度。 其他说明:本文不仅提供了理论分析,还包括了具体的代码实现和实验数据,有助于读者深入理解和应用该策略。同时,也为未来的研究提供了宝贵的参考和改进方向。

    T68镗床的控制系统的改造设计 电气控制系统PLC改造设计.rar

    T68镗床的控制系统的改造设计 电气控制系统PLC改造设计.rar

    毕业设计-万能表单weui 8.1.16-整站商业源码.zip

    毕业设计-万能表单weui 8.1.16-整站商业源码.zip

    2024年Google数据和AI趋势报告.pdf

    2024年Google数据和AI趋势报告.pdf

    mysql安装配置教程.docx

    mysql安装配置教程

Global site tag (gtag.js) - Google Analytics