Apache Mina 开发简介

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。

 

Apache Mina 1.0版本需要jdk1.4以上版本的支持,而1.1版本及2.0版本需要JDK5以上的支持。

 

使用Apache Mina来开发网络应用程序非常的方便,服务器端如果使用了MINA框架,客户端可以使用MINA框架也可以不使用MINA框架。

 

MINA的多线程模式设置也非常方便,在服务器端,它提供了多种可选的线程模式,在不同的处理阶段实现多线程。

 

MINA编程非常的简单,下边给出一个服务器端实现和普通socket客户端实现(MINA客户端的例子很多,可参考MINA的示例程序)。

 

下边的代码是基于MINA2.0的。

 

Server.java:

package cn.xxx.xxx.test;

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.executor.ExecutorFilter;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

/**
 * mina服务器测试
 *
 * @version 1.0 2010-2-5
 * @author  huangyuanmu
 * @since   JDK 5.0
 */
public class Server {
	
	/**
	 * 创建mina服务器进行监听
	 *
	 * @author  huangyuanmu  2010-2-9
	 * @param args
	 */
	public static void main(String[] args) {
		IoAcceptor acceptor = new NioSocketAcceptor();
		acceptor.getSessionConfig().setReadBufferSize(2048);
		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
		acceptor.setHandler(new ServerHandler());
		acceptor.getFilterChain().addLast("codec",
				new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("GBK"))));
		acceptor.getFilterChain().addLast("logger", new LoggingFilter());
		acceptor.getFilterChain().addLast("exceutor", new ExecutorFilter());
		try {
			acceptor.bind(new InetSocketAddress(8080));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

ServerHandle.java:

package cn.xxx.xxx.test;

import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;

/**
 * mina通信处理实现类
 *
 * @version 1.0 2010-2-5
 * @author  huangyuanmu
 * @since   JDK 5.0
 */
public class ServerHandler extends IoHandlerAdapter {
	
	/**
	 * 产生异常以后的处理
	 */
	public void exceptionCaught(IoSession session, Throwable cause){
		session.close(true);
		e.printStackTrace();
	}
	
	/**
	 * 接收到消息以后的处理
	 */
	public void messageReceived(IoSession session, Object msg) throws Exception {
		String msgStr = (String)msg;
		System.out.println("收到客户端发送的字符串:" + msgStr);
		session.write(msgStr);
	}
}

 

Client.java:

package cn.xxx.xxx.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;

/**
 * 访问mina服务器端测试
 * 
 * @version 1.0 2010-2-5
 * @author huangyuanmu
 * @since JDK 5.0
 */
public class Client {

	static Socket server;
	public static void main(String[] args) {
		try {
			server = new Socket(InetAddress.getLocalHost(), 8080);
			BufferedReader in = new BufferedReader(new InputStreamReader(server
					.getInputStream(),"GBK"));
			BufferedWriter out = new BufferedWriter(new OutputStreamWriter(server.getOutputStream(),"GBK"));
			out.write("你好,mina");
			out.newLine();
	        out.flush();
		        System.out.println("服务器端接收到字符串并返回:" + in.readLine());
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				server.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
 

可以看出,使用MINA编写Socket通信程序,非常的方便。

你可能感兴趣的:(java,apache,应用服务器,socket,Mina)