【Mina】Mina框架的例子--时间服务器

Mina的第一个例子,就是时间服务器:

 

服务器接收客户端的连接,

  只要客户发送不是“quit”,就把当前的时间返回给客户,

  客户发送“quit”,就关闭客户连接;

 

服务器程序:MinaTimeServer.java

import java.net.InetAddress;
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;

/**
 * @author Administrator
 *
 */
public class MinaTimeServer {
                // 服务器监听端口
	private static final int PORT = 9123;
	
	/**
	 * 
	 */
	public MinaTimeServer() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 服务器端的主要对象
		IoAcceptor acceptor = new NioSocketAcceptor();
		
                // 设置Filter链 
		acceptor.getFilterChain().addLast("logger", new LoggingFilter());
                // 协议解析,采用mina现成的UTF-8字符串处理方式
		acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
		
                 // 设置消息处理类(创建、关闭Session,可读可写等等,继承自接口IoHandler)
		acceptor.setHandler(new TimeServerHandler() );
                // 设置接收缓存区大小
		acceptor.getSessionConfig().setReadBufferSize(2048);
		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
		try {
                        // 服务器开始监听
			acceptor.bind( new InetSocketAddress(PORT) );
		}catch(Exception e){
			e.printStackTrace();
		}
		
		
	}

}
 

消息处理类:TimeServerHandler.java

import java.util.Date;

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

/**
 * @author Administrator
 * 
 */
// 继承自IoHandlerAdapter,IoHandlerAdapter继承接口 IoHandler
// 类IoHandlerAdapter实现了IoHandler的所有方法,自己只要重载关心的几个方法就可以了
public class TimeServerHandler extends IoHandlerAdapter {

	@Override
	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
		cause.printStackTrace();
	}

                 // 这个方法是目前这个类里最主要的,
                 // 当接收到消息,只要不是quit,就把服务器当前的时间返回给客户端
                 // 如果是quit,则关闭客户端连接
	@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...");

	}

}
 

服务器运行起来,telnet到9123端口,随便输入一串字符,回车,在屏幕上就可以显示服务器当前的时间;

输入quit,则和服务端连接中断

 

 

 

 

你可能感兴趣的:(Mina)