【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 {@Overridepublic void exceptionCaught(IoSession session, Throwable cause)throws Exception {cause.printStackTrace();} // 这个方法是目前这个类里最主要的, // 当接收到消息,只要不是quit,就把服务器当前的时间返回给客户端 // 如果是quit,则关闭客户端连接@Overridepublic 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,则和服务端连接中断
?
?
?
?
1 楼 香山早秋 2012-03-29 你好,我刚开始看mina框架,请问下这个程序如果是在eclipse中建立的一个java程序,运行后客户端是怎么去连接服务器的呢?命令行里面吗?从哪里输入信息呢 2 楼 zybing 2012-04-01 香山早秋 写道你好,我刚开始看mina框架,请问下这个程序如果是在eclipse中建立的一个java程序,运行后客户端是怎么去连接服务器的呢?命令行里面吗?从哪里输入信息呢客户端可以就采用telnet,
自己在command窗口中,"telnet到9123端口,随便输入一串字符,回车,在屏幕上就可以显示服务器当前的时间;输入quit,则和服务端连接中断"
就可以了