读书人

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

发布时间: 2012-11-20 09:55:43 作者: rapoo

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

就可以了

读书人网 >其他相关

热点推荐