`
sdh88hf
  • 浏览: 69629 次
  • 性别: Icon_minigender_1
  • 来自: 绍兴
社区版块
存档分类
最新评论

spring 整合mina

阅读更多
首先定义自定义过滤器
<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);
	}

}

分享到:
评论

相关推荐

    spring boot 整合mina 串口

    **Spring Boot 整合Mina实现串口通信详解** 在Java开发中,有时我们需要与硬件设备进行串口通信,例如读取传感器数据或控制工业设备。Spring Boot作为一款轻量级的框架,使得快速构建应用变得简单。而Mina则是一款...

    mina2+spring结合实例

    《Mina2与Spring整合应用实战》 在Java开发领域,Apache Mina和Spring框架的结合使用能够构建高效、可扩展的网络应用。Mina2作为一个轻量级的网络通信框架,提供了高度抽象的API,使得开发者可以方便地处理网络I/O...

    mina-examples:一个简单的spring整合mina实例

    一个简单的spring整合mina实例。分别介绍了TCP和UDP的用法。同时与Spring4.1.X进行了整合。 useage Tcp:首先运行HelloTcpServer,接着在运行HelloTcpClient。在HelloTcpClient的控制台输入消息内容,观察服务端返回...

    springboot 深度整合mina开箱即用

    总结来说,Spring Boot深度整合Mina可以帮助我们快速构建高性能的网络服务,降低了开发复杂性。这个开箱即用的方案对于新手开发者来说,是一个很好的学习起点,可以让他们快速掌握如何在Spring Boot环境中运用Mina...

    基于spring的Mina框架

    在Spring中整合Mina,首先需要在Spring配置文件中声明Mina的相关bean,如Acceptor、ProtocolCodecFactory(编码解码工厂)和FilterChainBuilder(过滤器链构建器)。通过Spring的依赖注入,我们可以轻松地管理这些...

    springboot整合mina

    SpringBoot整合Mina是一个常见的Java开发任务,它涉及到SpringBoot框架与Apache Mina网络通信库的集成。Mina是一个轻量级、高性能的网络应用框架,主要用于构建服务器端的网络应用,如TCP/IP和UDP协议的服务。而...

    spring结合Mina

    spring结合Mina的配置文件,设计到spring构造 属性编辑器

    spring+mina实现http接口服务端通信客户端

    整合Spring MVC和Mina的关键步骤如下: 1. **配置Spring MVC**:你需要创建一个Spring MVC配置文件(如`web.xml`和`spring-servlet.xml`),在其中定义DispatcherServlet、视图解析器以及其他必要的bean。同时,...

    Java springboot 整合mina 框架,nio通讯基础教程,mina框架基础教程.zip

    整合Mina到SpringBoot项目中,可以让Mina的网络通信能力与Spring的依赖注入、配置管理等优点相结合,实现更加便捷的服务开发。这通常涉及到Spring的自动配置、Bean的声明、以及Mina相关配置的编写。 在这个压缩包中...

    Mina例子包含与spring整合

    在这个"Mina例子包含与Spring整合"的项目中,我们将探讨如何将MINA与流行的Java企业级框架Spring进行集成。 1. **Apache MINA**:MINA是基于Java NIO(非阻塞I/O)的网络应用框架,用于构建高性能、跨平台的服务器...

    spring mvc + Mina 配置部署

    之前的项目需要用到mina,实现的功能主要是:服务端主动发送消息到客户端,这个的服务端为外网的...当然,我这里的服务端是整合的了spring 的,也可以直接把服务端独立出来,不整合spring,这个都一样,区别不大。

    Spring-mybaits-mina三大框架的整合

    在"Spring-mybaits-mina三大框架的整合"中,我们将看到如何将这三大框架集成到一个项目中,以实现更高效、更灵活的网络服务和数据访问。首先,Spring作为整体架构的基石,它的依赖注入特性使得我们可以方便地管理...

    Mina-Spring-Hibernate.rar_mina_mina hibernate_spring mina

    4. Mina-Spring整合 Spring的IoC容器可以管理Mina服务端或客户端的生命周期,使得Mina的配置变得更加简单和灵活。通过Spring的Bean定义,我们可以配置Mina的Acceptor、ProtocolDecoder、ProtocolEncoder等组件,实现...

    apache mina-spring 服务端程序

    在这个"apache mina-spring 服务端程序"项目中,Mina和Spring被整合在一起,创建了一个高效的服务端程序。这样的整合允许开发者利用Spring的强大功能来管理服务端的生命周期,配置网络连接,以及处理业务逻辑。...

    Mina+Struts2+Spring4+Mybatis3组合

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

    maven_spring mvc_mina dome

    【标题】"maven_spring mvc_mina dome" 涉及到的是一个整合了Maven、Spring MVC和Mina的示例项目,旨在帮助初学者理解和掌握如何在实际开发中结合这三个技术栈。 【Spring MVC】是Spring框架的一部分,它是一个用于...

    springboot 整合mina 源码,nio通讯基础教程,mina框架基础教程.rar

    整合Mina到Spring Boot项目中,我们需要引入对应的依赖,并配置相关的Bean。在`pom.xml`文件中,添加Mina和Spring Boot的相关依赖: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-...

    mina+spring+hibernate搭建所需jar包

    在构建Java企业级应用时,整合Apache MINA、Spring和Hibernate是常见的技术栈选择。这三个框架分别在不同的层面上提供服务:MINA为网络通信,Spring作为应用框架,而Hibernate则是对象关系映射(ORM)工具。以下是...

    Spring-mybaits-mina整合,可监听多端口

    1:Spring-mybaits-mina三大框架的整合,mina可以使用Spring的数据库数据库连接池,无需额外定义mybaits连接池。 2:mina可以自定义监听一个或者多个端口,可以从数据库中读取

    spring mina

    3. **Spring Mina与Spring的整合** - **Spring Bean管理**:Spring Mina允许通过Spring的IoC容器管理Mina的组件,如Acceptor、Filter、Codec等,实现依赖注入和配置管理。 - **AOP支持**:Spring Mina利用Spring的...

Global site tag (gtag.js) - Google Analytics