==============服务端===============
MinaTimeServer.java
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
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.NioSocketAcceptor;
public class MinaTimeServer {
private static final int PORT = 9123;
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
IoAcceptor acceptor = new NioSocketAcceptor();
acceptor.getFilterChain().addLast("logger", new LoggingFilter());
acceptor.getFilterChain().addLast(
"codec",
new ProtocolCodecFilter(new TextLineCodecFactory(Charset
.forName("UTF-8"))));
acceptor.setHandler(new TimeServerHandler());
acceptor.getSessionConfig().setReadBufferSize(2048);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
acceptor.bind(new InetSocketAddress(PORT));
System.out.println("MINA Time server started.");
}
}
TimeServerHandler.java
import java.util.Date;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class TimeServerHandler extends IoHandlerAdapter{
@Override
public void exceptionCaught( IoSession session, Throwable cause ) throws Exception
{
cause.printStackTrace();
}
@Override
public void messageReceived( IoSession session, Object message ) throws Exception
{
String str = message.toString();
if( str.trim().equalsIgnoreCase("quit") ) {
session.close();
return;
}
Date date = new Date();
session.write( date.toString() );
System.out.println("Message written..." + str);
}
@Override
public void sessionIdle( IoSession session, IdleStatus status ) throws Exception
{
System.out.println( "IDLE " + session.getIdleCount( status ));
}
}
===================客户端测试===================
MinaTimeClient.java
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
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;
/**
* @author Administrator
*
*/
public class MinaTimeClient {
private static final String HOSTNAME = "127.0.0.1";
private static final int PORT = 9123;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
IoConnector connector = new NioSocketConnector();
connector.setConnectTimeoutMillis(30 * 1000L);
connector.getFilterChain().addLast("logger", new LoggingFilter());
connector.getFilterChain().addLast("codec",
new ProtocolCodecFilter(new TextLineCodecFactory(Charset
.forName("UTF-8"))));
connector.setHandler(new TimeClientHandler());
ConnectFuture cf = connector.connect(new InetSocketAddress(HOSTNAME, PORT));
cf.awaitUninterruptibly();
cf.getSession().getCloseFuture().awaitUninterruptibly();
connector.dispose();
}
}
TimeClientHandler.java
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
/**
* @author Administrator
*
*/
public class TimeClientHandler extends IoHandlerAdapter {
@Override
public void sessionOpened(IoSession session) {
// Set reader idle time to 10 seconds.
// sessionIdle(...) method will be invoked when no data is read
// for 10 seconds.
session.getConfig().setIdleTime(IdleStatus.READER_IDLE, 10);
session.write("hello mina server!");
}
@Override
public void sessionClosed(IoSession session) {
// Print out total number of bytes read from the remote peer.
System.err.println("Total " + session.getReadBytes() + " byte(s)");
}
@Override
public void sessionIdle(IoSession session, IdleStatus status) {
// Close the connection if reader is idle.
if (status == IdleStatus.READER_IDLE) {
session.close(true);
}
}
@Override
public void messageReceived(IoSession session, Object message) {
System.out.println("client message receiving...");
System.out.println(message.toString());
}
}
log4j.properties 放在根目录
log4j.rootLogger=info, A1, A2
# A1 is set to be ConsoleAppender sending its output to System.out
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
# Appender A2 writes to the file .
log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.File=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.File=Mina2Link.log
log4j.appender.A2.Append=true
log4j.appender.A2.Threshold=INFO
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-5r %-5p [%t] %c{2} - %m%n
分享到:
相关推荐
由于压缩包中的文件名为"Mina1",我们可以推测它可能是第一个示例或者一个初级教程,涵盖了基本的Mina服务端和客户端创建。通过学习这个实例,开发者可以了解到如何启动Mina服务器,如何连接到服务器,以及如何在...
#### 四、Mina 2.0 与 Mina 1.x 的区别 虽然Mina 1.x系列已经非常成熟和稳定,但2.0版本在设计上做出了较大的改进,以适应更高的性能要求和更复杂的业务场景。Mina 2.0引入了更多现代化的特性,例如: - 更加灵活的...
由于Mina 2.x版本和1.x版本在功能上存在一些差异,所以开发者在使用Mina 1.x版本中的一些功能可能并不适用于2.x版本。在学习Mina框架的相关文档前,开发者需要具备一定的Java基础,特别是要熟悉Java IO、Socket编程...
MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,用于构建服务器端应用程序,尤其在开发TCP和UDP协议的应用时非常有用。MINA 1.0 版本是该框架的一个...
1. **Mina的高级使用** Mina的核心在于其异步事件驱动的模型,这使得它在处理大量并发连接时表现出色。通过使用I/O多路复用技术,如NIO(非阻塞I/O),Mina能够高效地管理多个连接,而无需为每个连接创建单独的线程...
1. **Filter Chain**:Mina的核心设计模式之一是过滤器链。每个连接都有一系列过滤器,它们按照顺序处理入站和出站事件。过滤器可以实现特定功能,如数据编码解码、安全验证、性能监控等。 2. **Session**:Session...
文档中提到的是最新版本2.0,如果读者之前使用的是Mina 1.x版本,可能会发现某些功能并不适用。Mina的API设计目的是将网络通信的复杂性与应用程序代码隔离开来,使得开发者可以更专注于应用层面的业务逻辑。 Mina...
在本手册中,将重点讲解最新版本的Mina 2.0,需要注意的是,Mina 1.x版本中的一些功能可能在2.0版本中并不适用,因此需要开发者更新知识库以适应新版本。 Mina框架的API设计是为了将底层的网络通信细节与应用程序...
MINA (Java IO Network Application Framework) 是一个由Apache软件基金会开发的开源网络通信框架,主要应用于构建高性能、高可用性的网络服务器。这个压缩包包含了MINA API文档、自学手册以及开发指南,对于学习和...
- Mina1_类.pdf可能涵盖了MINA框架的基础类和组件介绍。 - Mina3_与IoHandler相关的几个类.pdf和Mina2_与IoFilter相关的几个类.pdf将深入探讨IoHandler和IoFilter的具体实现类及其功能。 - Mina4_IoFilter和...
Mina 2.0 作为最新版本,相较于 Mina 1.x,引入了更新的特性和改进。使用 Mina 2.0 开发应用之前,需要掌握 Java I/O、Java NIO 以及线程和并发库(java.util.concurrent)的知识。 Mina 架构中的几个关键组件包括 ...
1. **检测连接状态**:心跳机制是检测连接状态的主要方式,如果心跳超时未响应,就认为连接中断。 2. **关闭连接**:一旦确定连接异常,应当立即关闭当前的IoSession。 3. **清理资源**:释放与旧连接相关的资源,如...
Mina和Socket是两种常见的网络通信框架和技术,它们在Java编程环境中被广泛使用。本篇文章将深入探讨如何使用Mina与Socket实现通信,并提供客户端和服务端的实现代码概述。 Mina(全称“MINA: Minimalistic ...
Mina 有两个主要分支,即 Mina 1.x 和 2.x,而本文档专注于 Mina 2.0 版本。在使用 Mina 2.0 开发时,开发者需要具备 Java IO、NIO、Java Socket、多线程以及并发库(如 `java.util.concurrent.*`)的基础知识。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-...
1. **非阻塞I/O**:MINA使用Java NIO(非阻塞I/O)库,这允许在单个线程中处理多个连接,极大地提高了系统资源的利用率和并发性能。 2. **事件驱动**:MINA基于事件驱动的设计,通过监听网络事件(如连接建立、数据...
* 1、添加@Controller注解和 @PostConstruct注解,代表启动springboot项目时也调用该类下的该方法, * 启动springboot项目,会启动两个服务两个端口,一个是http服务,一个是mina服务。两个服务互不影响 * 2、...
Apache Mina是一个开源项目,它提供了一个高度可扩展的网络通信框架,用于简化开发高性能、高可用性的网络服务器和客户端应用程序。"Mina demo mina jar包"指的是使用Apache Mina框架创建的一个演示示例,这个示例...
Apache Mina是一个高度可扩展的Java网络通信框架,它提供了简单而强大的开发接口,用于创建高性能、高效率的网络应用程序。Mina的核心理念是将网络协议处理与业务逻辑分离,使得开发者可以专注于实现应用程序的业务...
Apache Mina是一个高度可扩展的网络通信框架,它允许开发者创建高性能、高效率的服务端和客户端应用程序。在Java世界中,Mina以其简洁的API和灵活性而受到青睐,尤其适用于处理大量的并发连接,如TCP/IP和UDP协议。...