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,则和服务端连接中断