- 浏览: 69577 次
- 性别:
- 来自: 绍兴
最新评论
首先定义自定义过滤器
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 764很喜欢一本叫《走出软件作坊》的书,其中有一句话让我较为深刻,“ ... -
Web开发学习12 浅谈设计模式
2016-07-01 13:33 1325在我刚接触 ... -
Web开发学习11 全局缓存控制
2015-10-12 14:27 745缓存用的好可以减少数据库的压力,在大并发的情况下极大的提升服务 ... -
Web开发学习10 hadoop实战
2015-10-09 14:02 761前一篇说到项目记录了很多埋点日志,当有一天项目需求需要对这些日 ... -
Web开发学习(9)全局埋点
2015-07-27 11:10 2024埋点的作用是把客户端每次访问服务端的操作记录下来,包括请求连接 ... -
Web开发学习8Struts2基类封装
2015-07-24 12:03 709一个好的基类可以帮助开发者减少很多开发工作,像我这种爱偷懒的人 ... -
Web开发学习7按钮级别权限控制
2015-07-23 16:21 13353这个功能的思路是自己原创的,没看过其他例子,其实是在做之前网上 ... -
Web开发学习6添加liqiubase
2015-07-22 14:29 1466开发过程中经常碰到数据库更改的情况,在日常环境下如果每位开发人 ... -
浅列JavaEnum
2014-01-05 16:42 790enum Province{ ZHEJIANG,SHANGHA ... -
maven常用命令
2013-07-08 10:20 7921、创建普通Java项目: ... -
canvas绘制科赫雪花
2012-12-20 17:24 2159<html> <head> ... -
html5 audio与video方法属性事件概括
2012-12-20 14:46 1122play() 继续播放 pause() ... -
Web开发学习(5)添加springsecurity应用
2011-12-14 15:00 965我学习公司这个架构多半就是为了把springsecurity搞 ... -
Web开发学习(4)添加spring应用
2011-12-14 14:45 798印象中似乎没做过不用spring的项目,因为它在web开发中的 ... -
Web开发学习(3)配置struts-tiles插件(附带json插件)
2011-12-05 15:22 2572struts的tiles插件是非常实用的,从某些方面可以很好的 ... -
使用线程删除导出临时文件
2011-12-01 16:33 2275项目支持大数据量导出e ... -
jQuery实现表格行点击选中复选框
2011-11-23 12:36 6007这个需求是在项目完成后客户提出的要求,看似简单但是还需要一点小 ... -
Web开发学习(2)配置convention插件
2011-11-04 10:28 1396注解的方式某些程度上能减少xml的配置量,个人感觉使程序更加清 ... -
Web开发学习(1)使用eclipse搭建maven项目
2011-10-20 10:04 5747首先用eclipse创建工程 ne ... -
数据库连接泛型基类创建
2011-06-30 11:49 1000记录 以便以后参考---- 基类代码 public cl ...
相关推荐
**Spring Boot 整合Mina实现串口通信详解** 在Java开发中,有时我们需要与硬件设备进行串口通信,例如读取传感器数据或控制工业设备。Spring Boot作为一款轻量级的框架,使得快速构建应用变得简单。而Mina则是一款...
《Mina2与Spring整合应用实战》 在Java开发领域,Apache Mina和Spring框架的结合使用能够构建高效、可扩展的网络应用。Mina2作为一个轻量级的网络通信框架,提供了高度抽象的API,使得开发者可以方便地处理网络I/O...
一个简单的spring整合mina实例。分别介绍了TCP和UDP的用法。同时与Spring4.1.X进行了整合。 useage Tcp:首先运行HelloTcpServer,接着在运行HelloTcpClient。在HelloTcpClient的控制台输入消息内容,观察服务端返回...
总结来说,Spring Boot深度整合Mina可以帮助我们快速构建高性能的网络服务,降低了开发复杂性。这个开箱即用的方案对于新手开发者来说,是一个很好的学习起点,可以让他们快速掌握如何在Spring Boot环境中运用Mina...
在Spring中整合Mina,首先需要在Spring配置文件中声明Mina的相关bean,如Acceptor、ProtocolCodecFactory(编码解码工厂)和FilterChainBuilder(过滤器链构建器)。通过Spring的依赖注入,我们可以轻松地管理这些...
SpringBoot整合Mina是一个常见的Java开发任务,它涉及到SpringBoot框架与Apache Mina网络通信库的集成。Mina是一个轻量级、高性能的网络应用框架,主要用于构建服务器端的网络应用,如TCP/IP和UDP协议的服务。而...
spring结合Mina的配置文件,设计到spring构造 属性编辑器
整合Spring MVC和Mina的关键步骤如下: 1. **配置Spring MVC**:你需要创建一个Spring MVC配置文件(如`web.xml`和`spring-servlet.xml`),在其中定义DispatcherServlet、视图解析器以及其他必要的bean。同时,...
整合Mina到SpringBoot项目中,可以让Mina的网络通信能力与Spring的依赖注入、配置管理等优点相结合,实现更加便捷的服务开发。这通常涉及到Spring的自动配置、Bean的声明、以及Mina相关配置的编写。 在这个压缩包中...
在这个"Mina例子包含与Spring整合"的项目中,我们将探讨如何将MINA与流行的Java企业级框架Spring进行集成。 1. **Apache MINA**:MINA是基于Java NIO(非阻塞I/O)的网络应用框架,用于构建高性能、跨平台的服务器...
之前的项目需要用到mina,实现的功能主要是:服务端主动发送消息到客户端,这个的服务端为外网的...当然,我这里的服务端是整合的了spring 的,也可以直接把服务端独立出来,不整合spring,这个都一样,区别不大。
在"Spring-mybaits-mina三大框架的整合"中,我们将看到如何将这三大框架集成到一个项目中,以实现更高效、更灵活的网络服务和数据访问。首先,Spring作为整体架构的基石,它的依赖注入特性使得我们可以方便地管理...
4. Mina-Spring整合 Spring的IoC容器可以管理Mina服务端或客户端的生命周期,使得Mina的配置变得更加简单和灵活。通过Spring的Bean定义,我们可以配置Mina的Acceptor、ProtocolDecoder、ProtocolEncoder等组件,实现...
在这个"apache mina-spring 服务端程序"项目中,Mina和Spring被整合在一起,创建了一个高效的服务端程序。这样的整合允许开发者利用Spring的强大功能来管理服务端的生命周期,配置网络连接,以及处理业务逻辑。...
该项目是本人真实项目中使用到的mina + spring+struts2 + mybatis框架,里面有详细的注释说明,以及一个完整的接收消息、入库、返回例子。对需要真实项目开发的人员来说,可以直接使用。 另外,如果需要更加详细的...
【标题】"maven_spring mvc_mina dome" 涉及到的是一个整合了Maven、Spring MVC和Mina的示例项目,旨在帮助初学者理解和掌握如何在实际开发中结合这三个技术栈。 【Spring MVC】是Spring框架的一部分,它是一个用于...
整合Mina到Spring Boot项目中,我们需要引入对应的依赖,并配置相关的Bean。在`pom.xml`文件中,添加Mina和Spring Boot的相关依赖: ```xml <groupId>org.springframework.boot <artifactId>spring-boot-...
在构建Java企业级应用时,整合Apache MINA、Spring和Hibernate是常见的技术栈选择。这三个框架分别在不同的层面上提供服务:MINA为网络通信,Spring作为应用框架,而Hibernate则是对象关系映射(ORM)工具。以下是...
1:Spring-mybaits-mina三大框架的整合,mina可以使用Spring的数据库数据库连接池,无需额外定义mybaits连接池。 2:mina可以自定义监听一个或者多个端口,可以从数据库中读取
3. **Spring Mina与Spring的整合** - **Spring Bean管理**:Spring Mina允许通过Spring的IoC容器管理Mina的组件,如Acceptor、Filter、Codec等,实现依赖注入和配置管理。 - **AOP支持**:Spring Mina利用Spring的...