Mina框架学习笔记(一)

来源:互联网 发布:网络教育专业解读 编辑:程序博客网 时间:2024/04/30 09:31

本文是入门篇,先来写一个简单的socket server服务器程序,可以用telnet来连接,当服务器收到客户端的连接时会把服务器上的时间返回给客户。

 

首先引入四个包:

mina-core-2.0.0.jar

slf4j-api-1.6.1.jar

slf4j-jdk14-1.6.1.jar

slf4j-log4j12-1.6.1.jar

 

接着创建一个主服务类:MinaTimeServer

[java] view plaincopy
  1. import java.io.IOException;  
  2. import java.net.InetSocketAddress;  
  3. import java.nio.charset.Charset;  
  4. import org.apache.mina.core.service.IoAcceptor;  
  5. import org.apache.mina.core.session.IdleStatus;  
  6. import org.apache.mina.filter.codec.ProtocolCodecFilter;  
  7. import org.apache.mina.filter.codec.textline.TextLineCodecFactory;  
  8. import org.apache.mina.filter.logging.LoggingFilter;  
  9. import org.apache.mina.transport.socket.nio.NioSocketAcceptor;  
  10. public class MinaTimeServer {  
  11.     public static void main(String[] args) throws IOException {  
  12.         IoAcceptor acceptor = new NioSocketAcceptor();  
  13.           
  14.         //This filter will log all information such as newly created   
  15.             //sessions, messages received, messages sent, session closed  
  16.         acceptor.getFilterChain().addLast("logger"new LoggingFilter());  
  17.         //This filter will translate binary or protocol specific data into   
  18.             //message object and vice versa. We use an existing TextLine   
  19.             //factory because it will handle text base message for you (  
  20.             //you don't have to write the codec part)  
  21.         acceptor.getFilterChain().addLast("codec"new ProtocolCodecFilter(  
  22.                 new TextLineCodecFactory(Charset.forName("UTF-8"))));  
  23.           
  24.         acceptor.setHandler(new TimeServerHandler());  
  25.           
  26.         acceptor.getSessionConfig().setReadBufferSize(BUF_SIZE);  
  27.         //the first parameter defines what actions to check for when   
  28.             //determining if a session is idle, the second parameter defines   
  29.             //the length of time in seconds that must occur before a session   
  30.             //is deemed to be idle.  
  31.         acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);  
  32.           
  33.         acceptor.bind(new InetSocketAddress(PORT));  
  34.     }  
  35.     private static final int PORT = 8181,BUF_SIZE = 2048;  
  36. }  
 

 

 

再创建一个handler来管理事件

[java] view plaincopy
  1. package mina;  
  2. import java.util.Date;  
  3. import org.apache.mina.core.service.IoHandlerAdapter;  
  4. import org.apache.mina.core.session.IdleStatus;  
  5. import org.apache.mina.core.session.IoSession;  
  6. public class TimeServerHandler extends IoHandlerAdapter {  
  7.     @Override  
  8.     public void exceptionCaught(IoSession session, Throwable cause)  
  9.             throws Exception {  
  10.         cause.printStackTrace();  
  11.     }  
  12.     @SuppressWarnings("deprecation")  
  13.     @Override  
  14.     public void messageReceived(IoSession session, Object message)  
  15.             throws Exception {  
  16.         String str = message.toString();  
  17.         System.out.println("Message received:"+str);  
  18.         if(str.trim().equalsIgnoreCase("quit")){  
  19.             session.close();  
  20.             return;  
  21.         }  
  22.           
  23.         Date date = new Date();  
  24.         session.write(date.toString());  
  25.         System.out.println("Message written.");  
  26.     }  
  27.     @Override  
  28.     public void messageSent(IoSession session, Object message) throws Exception {  
  29.         super.messageSent(session, message);  
  30.     }  
  31.     @Override  
  32.     public void sessionClosed(IoSession session) throws Exception {  
  33.         super.sessionClosed(session);  
  34.     }  
  35.     @Override  
  36.     public void sessionCreated(IoSession session) throws Exception {  
  37.         super.sessionCreated(session);  
  38.     }  
  39.     @Override  
  40.     public void sessionIdle(IoSession session, IdleStatus status)  
  41.             throws Exception {  
  42.         System.out.println("IDLE"+session.getIdleCount(status));  
  43.     }  
  44.     @Override  
  45.     public void sessionOpened(IoSession session) throws Exception {  
  46.         // TODO Auto-generated method stub  
  47.         super.sessionOpened(session);  
  48.     }  
  49.       
  50. }  
 

 

运行MinaTimeServer,再用telnet来连接,命令格式如:telnet 127.0.0.1 8181

(第一节结束,第二节待续)

0 0