Mina是基于java nio实现的一套方便开发高性能远程通信程序的框架。
官方学习文档:https://mina.apache.org/mina-project/userguide/user-guide-toc.html
下面是实例一:简单服务端实例
程序功能:将客户端发送过来的消息打印出来, 并将当前时间发送回客户端
首先新建项目,并加入Mina依赖 (本人创建的maven项目,如果不是maven项目,就去Mina官网下载相应的jar包)
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mina</groupId>
<artifactId>mina-test</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>mina-test</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>2.0.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.6</version>
</dependency>
</dependencies>
</project>
接下来是服务端主程序
package com.zf.mina.test01;
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 {
public static void main(String[] args) throws IOException {
//使用IoAcceptor来接收客户端的请求
IoAcceptor acceptor = new NioSocketAcceptor() ;
//加入内置的LoggingFilter,用户打印出一个请求过程中的信息
acceptor.getFilterChain().addLast("logger", new LoggingFilter()) ;
//使用Mina提供的ProtocolCodecFilter来对消息进行编码和解码,使用Mina提供的TextLineCodecFactory对消息进行分行处理
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
//设置消息处理器,当接收到消息时,可以进行相应的业务操作
acceptor.setHandler(new TimeServerHandler()) ;
//配置Buffer大小
acceptor.getSessionConfig().setReadBufferSize(2048);
//如果Session在指定时间内没有事情做(读/写),那么就会触发Handler的sessionIdle方法
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10) ;
//绑定好要监听的端口
acceptor.bind(new InetSocketAddress(8080)) ;
}
}
消息处理器
package com.zf.mina.test01;
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;
/**
* Server端的消息处理器
* @author Administrator
*
*/
public class TimeServerHandler extends IoHandlerAdapter{
/**
* 当通信出现异常时会触发该方法
*/
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
cause.printStackTrace() ;
}
/**
* 当接收到客户端发来的消息时,此方法会被触发
*/
public void messageReceived(IoSession session, Object message)
throws Exception {
String msg = message.toString() ; //获取客户端发来的消息
if(msg.trim().equalsIgnoreCase("quit")){
session.close(false) ;
System.out.println("Session closed");
return ;
}
System.out.println("收到客户端消息:" + msg);
Date date = new Date() ;
session.write(date.toLocaleString() ) ; //将消息发送给客户端
System.out.println("Message wittern...");
}
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
System.out.println("IDLE " + session.getIdleCount(status) );
}
}
此时服务端程序就编写完成了。 现在可以启动MinaTimeServer类了 。
然后打开命令行工具,输入如下命令:
telnet localhost 8080
然后就可以输入内容了。 随便输入什么内容。 会看到会将客户端输入的内容输出, 并且在客户端会打印出当前系统时间