1、下载相应的开发包http://mina.apache.org/,MINA2.0版本包含了spring开发包,还需下载其他相关包,我的工程用到的包如下图:
2、配置spring的applicationContext.xml,配置mina服务;
- <?xml version="1.0" encoding="UTF-8"?>
-
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
-
-
- <bean id="serverHandler" class="com.supconit.its.server.handler.ServerHandler" />
-
-
- <bean id="executorFilter" class="org.apache.mina.filter.executor.ExecutorFilter" />
-
- <bean id="mdcInjectionFilter" class="org.apache.mina.filter.logging.MdcInjectionFilter">
- <constructor-arg value="remoteAddress" />
- </bean>
-
- <bean id="codecFilter" class="org.apache.mina.filter.codec.ProtocolCodecFilter">
- <constructor-arg>
-
-
-
- <bean class="com.supconit.its.server.handler.ServerCodeFactory" />
- </constructor-arg>
- </bean>
-
- <bean id="loggingFilter" class="org.apache.mina.filter.logging.LoggingFilter" />
-
- <bean id="filterChainBuilder" class="org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder">
- <property name="filters">
- <map>
- <entry key="executor" value-ref="executorFilter" />
- <entry key="mdcInjectionFilter" value-ref="mdcInjectionFilter" />
- <entry key="codecFilter" value-ref="codecFilter" />
- <entry key="loggingFilter" value-ref="loggingFilter" />
- </map>
- </property>
- </bean>
-
- <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
- <property name="customEditors">
- <map>
- <entry key="java.net.SocketAddress">
- <bean class="org.apache.mina.integration.beans.InetSocketAddressEditor" />
- </entry>
- </map>
- </property>
- </bean>
-
- <bean id="ioAcceptor" class="org.apache.mina.transport.socket.nio.NioSocketAcceptor" init-method="bind" destroy-method="unbind">
- <property name="defaultLocalAddress" value=":1235" />
- <property name="handler" ref="serverHandler" />
- <property name="filterChainBuilder" ref="filterChainBuilder" />
- <property name="reuseAddress" value="true" />
- </bean>
3、ServerHandler实现类
- package com.supconit.its.server.handler;
-
- import java.net.InetSocketAddress;
- import java.util.Collections;
- import java.util.Date;
- import java.util.HashSet;
- import java.util.Set;
-
- import org.apache.log4j.Logger;
- import org.apache.mina.core.service.IoHandlerAdapter;
- import org.apache.mina.core.session.IdleStatus;
- import org.apache.mina.core.session.IoSession;
-
-
- public class ServerHandler extends IoHandlerAdapter {
-
- private final int IDLE = 300;
-
-
- private final Logger log = Logger.getLogger(ServerHandler.class.getName());
-
- public static Set<IoSession> sessions = Collections .synchronizedSet(new HashSet<IoSession>());
-
-
-
-
- public ServerHandler(){
-
- }
-
- @Override
- public void exceptionCaught(IoSession session, Throwable cause)
- throws Exception {
- session.close();
-
- log.debug("session occured exception, so close it." + cause.getMessage());
- }
-
- @Override
- public void sessionCreated(IoSession session) {
-
- log.debug("remote client ["+session.getRemoteAddress().toString()+"] connected.");
- session.write("Welcome");
- sessions.add(session);
- }
-
- @Override
- public void messageReceived(IoSession session, Object message)
- throws Exception {
- String str = message.toString();
- log.debug("Message written..." + str);
- log.debug("客户端"+((InetSocketAddress) session.getRemoteAddress()).getAddress().getHostAddress()+"连接成功!");
-
-
-
-
-
-
-
-
- session.setAttribute("type", message);
- String remoteAddress = ((InetSocketAddress) session.getRemoteAddress()).getAddress().getHostAddress();
- session.setAttribute("ip", remoteAddress);
-
- }
-
- @Override
- public void sessionClosed(IoSession session) throws Exception {
- log.debug("sessionClosed.");
- sessions.remove(session);
- }
-
- @Override
- public void sessionIdle(IoSession session, IdleStatus status)
- throws Exception {
- log.debug("session idle, so disconnecting......");
- session.close();
- log.debug("disconnected.");
- }
-
-
- @Override
- public void messageSent(IoSession session, Object message) throws Exception {
- log.debug("messageSent.");
-
-
- }
-
- @Override
- public void sessionOpened(IoSession session) throws Exception {
- log.debug("sessionOpened.");
-
- session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, IDLE);
- }
-
- }
4、过滤器ServerCodeFactory
- package com.supconit.its.server.handler;
-
- import java.nio.charset.Charset;
-
- import org.apache.mina.core.session.IoSession;
- import org.apache.mina.filter.codec.ProtocolCodecFactory;
- import org.apache.mina.filter.codec.ProtocolDecoder;
- import org.apache.mina.filter.codec.ProtocolEncoder;
- import org.apache.mina.filter.codec.textline.LineDelimiter;
- import org.apache.mina.filter.codec.textline.TextLineDecoder;
- import org.apache.mina.filter.codec.textline.TextLineEncoder;
-
- public class ServerCodeFactory implements ProtocolCodecFactory {
-
- private final TextLineEncoder encoder;
- private final TextLineDecoder decoder;
-
- final static char endchar = 0x0d;
- public ServerCodeFactory() {
- this(Charset.forName("gb2312"));
- }
- public ServerCodeFactory(Charset charset) {
- encoder = new TextLineEncoder(charset, LineDelimiter.UNIX);
- decoder = new TextLineDecoder(charset, LineDelimiter.AUTO);
- }
-
- @Override
- public ProtocolDecoder getDecoder(IoSession session) throws Exception {
-
- return decoder;
- }
- @Override
- public ProtocolEncoder getEncoder(IoSession session) throws Exception {
-
- return encoder;
- }
- public int getEncoderMaxLineLength() {
- return encoder.getMaxLineLength();
- }
- public void setEncoderMaxLineLength(int maxLineLength) {
- encoder.setMaxLineLength(maxLineLength);
- }
- public int getDecoderMaxLineLength() {
- return decoder.getMaxLineLength();
- }
- public void setDecoderMaxLineLength(int maxLineLength) {
- decoder.setMaxLineLength(maxLineLength);
- }
-
- }
5、启动spring+mina socket server;
- package com.supconit.its.server.test;
-
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class Test {
-
-
-
-
- public static void main(String[] args) {
- ClassPathXmlApplicationContext ct = new ClassPathXmlApplicationContext("applicationContext.xml");
-
- }
-
- }
6、客户端测试ClintTest
- package com.supconit.its.server.test;
-
- import java.net.InetSocketAddress;
- import java.nio.charset.Charset;
-
- import org.apache.mina.core.future.ConnectFuture;
- import org.apache.mina.filter.codec.ProtocolCodecFilter;
- import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
- import org.apache.mina.filter.logging.LoggingFilter;
- import org.apache.mina.transport.socket.nio.NioSocketConnector;
-
- import com.supconit.its.server.handler.ServerHandler;
-
-
-
- public class ClintTest {
-
-
-
-
- public static void main(String[] args) {
- NioSocketConnector connector = new NioSocketConnector();
- connector.getFilterChain().addLast( "logger", new LoggingFilter() );
-
- connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( )));
- connector.setConnectTimeout(1);
- connector.setHandler(new ServerHandler());
- ConnectFuture cf = connector.connect(
- new InetSocketAddress("127.0.0.1", 1235));
- cf.awaitUninterruptibly();
- cf.getSession().write("hello,测试!");
-
- cf.getSession().close();
- cf.getSession().getCloseFuture().awaitUninterruptibly();
- connector.dispose();
-
- }
-
- }
分享到:
相关推荐
**Mina2.x开发示例** Apache Mina是一个开源项目,提供了一个高度可扩展的网络通信框架,适用于各种协议,如TCP、UDP和HTTP。它主要用于简化开发高性能、高并发的网络应用程序,如服务器和客户端。在Mina2.x版本中...
通过这个项目,开发者可以学习到如何将Mina的异步I/O能力与Spring的容器管理及依赖注入机制结合,构建出健壮且易于维护的网络服务端程序。这包括理解Mina的事件模型、Spring的bean管理和网络编程的最佳实践。同时,...
在Java开发领域,Mina、Spring和Hibernate是三个非常重要的技术组件。Mina作为一个高效的网络通信框架,Spring作为全栈式框架,而Hibernate则是主流的对象关系映射(ORM)框架。将这三个框架进行整合,可以构建出...
《Mina2与Spring整合应用实战》 在Java开发领域,Apache Mina和Spring框架的结合使用能够构建高效、可扩展的网络应用。Mina2作为一个轻量级的网络通信框架,提供了高度抽象的API,使得开发者可以方便地处理网络I/O...
在Java开发中,有时我们需要与硬件设备进行串口通信,例如读取传感器数据或控制工业设备。Spring Boot作为一款轻量级的框架,使得快速构建应用变得简单。而Mina则是一款强大的网络通信库,它提供了对TCP/IP和UDP协议...
标题中的"SSI+Mina2(Struts2+Spring4+Mybatis3+Mina2)集成发布就可运行"指的是一个基于Java的Web应用程序开发框架的整合,它结合了多种技术来构建高效、灵活和可扩展的网络应用。这个集成方案主要包括以下组件: 1....
在这个"Mina例子包含与Spring整合"的项目中,我们将探讨如何将MINA与流行的Java企业级框架Spring进行集成。 1. **Apache MINA**:MINA是基于Java NIO(非阻塞I/O)的网络应用框架,用于构建高性能、跨平台的服务器...
JetLinks 基于Java8,Spring Boot 2.x ,WebFlux,Netty,Vert.x,Reactor等开发, 是一个全响应式的企业级物联网平台。支持统一物模型管理,多种设备,多种厂家,统一管理。统一设备连接管理,多协议适配(TCP,MQTT,UDP,CoAP,...
@Value("${mina.port:8080}") private int port; @Bean public ServerBootstrap serverBootstrap() { ServerBootstrap bootstrap = new ServerBootstrap(); EventLoopGroup bossGroup = new ...
文件可能涵盖了MINA2的高级主题,如性能调优、异常处理策略、自定义过滤器的实现以及与其他开源库的集成等。 总的来说,MINA2作为一个强大的网络通信框架,不仅提供了高效稳定的并发处理能力,还具备了高度灵活性和...
标题中的"mina 与spring的结合开发,包头指令"可能是指在使用MINA构建网络服务时,如何利用Spring框架来管理和配置MINA的应用上下文,以及如何通过Spring的配置来定义和处理网络通信中的包头信息。 在MINA中,数据...
3. **集成Mina**:引入Mina的相关依赖,然后在Spring配置中定义Mina的ServerBootstrap,包括Acceptor、ProtocolHandler以及相关的配置。Mina的IoHandler接口需要实现,用于处理接收到的网络事件。 4. **编写...
Spring与Mina的整合** 在Spring中整合Mina,首先需要在Spring配置文件中声明Mina的相关bean,如Acceptor、ProtocolCodecFactory(编码解码工厂)和FilterChainBuilder(过滤器链构建器)。通过Spring的依赖注入,...
该项目是本人真实项目中使用到的mina + spring+struts2 + mybatis框架,里面有详细的注释说明,以及一个完整的接收消息、入库、返回例子。对需要真实项目开发的人员来说,可以直接使用。 另外,如果需要更加详细的...
2. **Spring集成**:Spring框架提供了IoC(Inversion of Control)和AOP(Aspect Oriented Programming),可以方便地管理和配置Mina服务,以及处理服务间的依赖关系。 3. **文件传输**:在Mina中,文件传输通常...
在本文中,我们将深入探讨如何将Spring Boot与Mina进行深度整合,以便为新手开发者提供一个开箱即用的解决方案。Spring Boot以其简洁的配置和快速的开发体验,已经成为Java领域中的主流微服务框架,而Mina则是一个...
SpringBoot整合Mina是一个常见的Java开发任务,它涉及到SpringBoot框架与Apache Mina网络通信库的集成。Mina是一个轻量级、高性能的网络应用框架,主要用于构建服务器端的网络应用,如TCP/IP和UDP协议的服务。而...
- **mina-integration-spring**模块:如果你的项目使用Spring框架,这个模块可以帮助你更好地集成Mina。 通过分析源码,你可以了解到Mina如何实现非阻塞I/O、如何调度任务、如何组织过滤器链,以及如何处理各种网络...
mina函数.xls
#### 四、Mina 2.0 与 Mina 1.x 的区别 虽然Mina 1.x系列已经非常成熟和稳定,但2.0版本在设计上做出了较大的改进,以适应更高的性能要求和更复杂的业务场景。Mina 2.0引入了更多现代化的特性,例如: - 更加灵活的...