MINA框架的搭建主要的类与发法


最近在学习MINA框架,所以整理了下

注:MINA框架中的主要类

NioSocketAcceptor用于创建服务端监听;
NioSocketConnector用于创建客户端连接;
IoSession用来保存会话属性和发送消息;
IoHandlerAdapter用于定义业务逻辑,常用的方法有:
sessionCreated() 当会话创建时被触发;
sessionOpened() 当会话开始时被触发;
sessionClosed() 当会话关闭时被触发;
sessionIdle() 当会话空闲时被触发;
exceptionCaught() 当接口中其他方法抛出异常未被捕获时触发此方法;
messageReceived() 当接收到消息后被触发;

messageSent() 当发送消息后被触发;

使用的架包分别是:mina-core-2.0.9.jar 、 slf4j-simple-1.7.12.jar、slf4j-api-1.7.12.jar

创一个连接服务器的类 CreateMinaServer

package mina.demo;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

//传输数据类
public class CreateMinaServer extends IoHandlerAdapter {
		private int count = 0; //记录客户端的连接次数
		
		//当一个新客户端连接时触发该方法
		public void sessionCreated(IoSession ioSession){
				System.out.println("\n新客服端连接了");
		}
		//当一个客户端连接时
		public void sessionOpened(IoSession ioSession) throws Exception{
			count ++;
			System.out.println("\n第"+ count +"个客户端登录!address:"+ ioSession.getRemoteAddress());
		}
		
		//当客户端发送的消息到达时
		public void meassageReceived(IoSession session, Object message){
				User user = (User)message;
				System.out.println("\n"+user.getName());
				
				user.setName("张无忌");
				session.write(user);
		}
		
		//当信息传达到客户端时触发该方法
		public void messageSent(IoSession session,Object message){
			System.out.println("\n信息已传送到客户端。");
		}
		
		//当客户端关闭时
		public void sessionClosed(IoSession session){
			System.out.println("\n客户端已关闭。");
		}
		
		 // 当连接空闲时触发此方法
		public void sessionIdle(IoSession session,IdleStatus status){
			System.out.println("连接空闲。");
		}
		
		// 当接口中其他方法抛出异常未被捕获时触发此方法
		@Override
		public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
				System.out.println("其他方法抛出异常。");
		}
		
}
测试类 TestMina

package mina.demo.test;

import java.io.IOException;
import java.net.InetSocketAddress;

import mina.demo.CreateMinaServer;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class TestMina {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
			//创建一个非阻塞的服务器端(Server)的槽(Socket),用NIO
			SocketAcceptor acceptor = new NioSocketAcceptor();
			
			//创建接受数据的过滤器
			DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
			
			
			//设定过滤器一行行(/r/n)的读取数据
			chain.addLast("mychin", new ProtocolCodecFilter(new TextLineCodecFactory()   ));
	        
			
			//假设这个过滤器将以对象的单位读取数据
			ProtocolCodecFilter filter = new ProtocolCodecFilter (new ObjectSerializationCodecFactory());
			chain.addLast("objectFilter", filter);
			
			//设定服务器消息处理器
			acceptor.setHandler(new CreateMinaServer());
			
			//绑定服务器的端口
			int port = 1010;
			
			/*
			//绑定端口号,启动服务器
			try {
				acceptor.bind(new InetSocketAddress(port));
			} catch (IOException e) {
					System.out.println("启动服务器错误:" + port);
					e.printStackTrace();
			}
			
			*/
			//关闭服务器
			acceptor.dispose(true);
			if(acceptor.isDisposed()){
				System.out.println("关闭服务器成功!");
			}
			
			
			//System.out.println("启动服务器成功:" + port);
	}

}


你可能感兴趣的:(MINA)