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">
- <!-- mina server -->
- <bean id="serverHandler" class="com.supconit.its.server.handler.ServerHandler" />
- <!-- executorFilter多线程处理 -->
- <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="org.apache.mina.filter.codec.textline.TextLineCodecFactory" />-->
- <!-- 处理对象流时候用ObjectSerializationCodecFactory -->
- <!-- <bean class="org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory" /> -->
- <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 = LoggerFactory .getLogger(HandlerTwo.class);
- 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.");
- 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()+"连接成功!");
- /*if (str.trim().equalsIgnoreCase("quit")) {
- session.close();//
- return;
- }*/
- //Date date = new Date();
- //session.write(date.toString());//
- //session.setAttribute(remoteAddress, message);
- 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.");
- // disconnect an idle client
- //session.close();
- }
- @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 = 0x1a;*/
- 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 {
- // TODO Auto-generated method stub
- return decoder;
- }
- @Override
- public ProtocolEncoder getEncoder(IoSession session) throws Exception {
- // TODO Auto-generated method stub
- 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 {
- /**
- * @param args
- */
- 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 {
- /**
- * @param args
- */
- public static void main(String[] args) {
- NioSocketConnector connector = new NioSocketConnector();
- connector.getFilterChain().addLast( "logger", new LoggingFilter() );
- //connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "GBK" )))); //
- 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().write("quit");//
- cf.getSession().close();
- cf.getSession().getCloseFuture().awaitUninterruptibly();//
- connector.dispose();
- }
- }
相关推荐
Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...
Apache Mina是一个开源的网络通信应用框架,主要应用于Java平台,它为高性能、高可用性的网络应用程序提供了基础架构。在本文中,我们将深入探讨Mina的高级使用,特别是在文件图片传送、文件发送、XML和JSON报文处理...
Mina和Socket是两种常见的网络通信框架和技术,它们在Java编程环境中被广泛使用。本篇文章将深入探讨如何使用Mina与Socket实现通信,并提供客户端和服务端的实现代码概述。 Mina(全称“MINA: Minimalistic ...
Apache Mina是一个开源的网络通信框架,常用于构建高性能、高效率的服务端应用程序,尤其在Java平台上。在本文中,我们将深入探讨Mina的核心概念,包括连接管理、心跳机制以及断线重连策略。 首先,让我们理解"Mina...
**mina自定义编解码器详解** mina是一个Java开发的网络通信框架,广泛应用于TCP和UDP协议的服务器和客户端开发。在mina框架中,编解码器(Codec)扮演着至关重要的角色,它负责将应用层的数据转换为网络传输的字节...
Java SpringBoot 整合Mina框架,涉及到的核心技术主要包括Java NIO(非阻塞I/O)、Mina框架以及SpringBoot的集成应用。本教程旨在帮助开发者深入理解和掌握这些技术,并提供了一个可直接使用的基础平台框架。 Java ...
标题中的“给予mina协议进行大数据传输”指的是一种基于Java的网络通信框架——Apache MINA(Model-View-Controller for Network Applications)。MINA是Apache软件基金会的一个项目,它提供了一个高度可扩展和高...
Apache Mina是一个高度可扩展的网络通信框架,它允许开发者创建高性能、高效率的服务端和客户端应用程序。在Java世界中,Mina以其简洁的API和灵活性而受到青睐,尤其适用于处理大量的并发连接,如TCP/IP和UDP协议。...
在本文中,我们将深入探讨如何将Spring Boot与Mina进行深度整合,以便为新手开发者提供一个开箱即用的解决方案。Spring Boot以其简洁的配置和快速的开发体验,已经成为Java领域中的主流微服务框架,而Mina则是一个...
MINA (Java IO Network Application Framework) 是一个由Apache软件基金会开发的开源网络通信框架,主要应用于构建高性能、高可用性的网络服务器。这个压缩包包含了MINA API文档、自学手册以及开发指南,对于学习和...
mina心跳包机制是Apache Mina框架中的一个关键特性,它用于维持网络连接的活跃状态,确保数据能够在客户端和服务端之间顺畅地传输。Mina是一个高度可扩展的Java网络应用框架,广泛应用于各种分布式系统和网络服务,...
Apache Mina是一个强大的网络通信框架,专为基于TCP/IP和UDP/IP协议栈的应用设计。它提供了JAVA对象的序列化和虚拟机内部通信的功能,使得开发者能够迅速构建高性能、高可扩展性的网络应用。Mina的核心特性是其事件...
**Spring Boot 整合Mina实现串口通信详解** 在Java开发中,有时我们需要与硬件设备进行串口通信,例如读取传感器数据或控制工业设备。Spring Boot作为一款轻量级的框架,使得快速构建应用变得简单。而Mina则是一款...
mina-core-2.0.0-M6.jar mina-example-2.0.0-M6.jar mina-filter-codec-netty-2.0.0-M6.jar mina-filter-compression-2.0.0-M6.jar mina-integration-beans-2.0.0-M6.jar mina-integration-jmx-2.0.0-M6.jar mina-...
Apache Mina是一个开源的网络通信框架,主要用于简化Java应用程序与远程服务器之间的通信。它提供了高度可扩展和高性能的网络协议处理能力,支持多种传输层协议,如TCP/IP、UDP/IP和SSL/TLS等。在本示例中,我们关注...
《mina2.0全部jar包详解》 Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发Java网络应用,特别是那些基于TCP和UDP协议的...
在IT行业中,网络通信是不可或缺的一部分,而Apache MINA(Model-Independent Network Application Framework)是一个高性能、异步的网络应用程序框架,广泛应用于TCP/IP和UDP协议的开发。当我们遇到"MINA断线重连...
MINA2.0 用户手册中文随笔翻译 MINA 是一个基于 NIO(Non-Blocking I/O)的网络框架,提供了统一的接口来处理 TCP、UDP 和其他机制的通信。MINA 的主要特点是能够处理大量的 socket 连接,并提供了一个高层接口来...
**Android-MinaSocket:基于Mina的高效Socket长连接库** 在移动应用开发中,尤其是Android平台,实时性与稳定性是许多应用场景的核心需求,比如在线游戏、即时通讯、物联网设备等。在这种背景下,使用Socket进行长...
Apache Mina是一个高度可扩展的网络通信框架,用于构建高性能、高效率的网络应用程序,如服务器和客户端。在"MINA 2.0.7原代码,去掉slf4j代码"这个项目中,我们可以看到Mina的核心组件mina_core_2.0.7已经被剥离了...