Mina学习笔记(一) 简单服务端实例

Mina是基于Java nio实现的一套方便开发高性能远程通信程序的框架。

官方学习文档:https://mina.apache.org/mina-project/userguide/user-guide-toc.html


下面是实例一:简单服务端实例 

程序功能:将客户端发送过来的消息打印出来, 并将当前时间发送回客户端


首先新建项目,并加入Mina依赖  (本人创建的maven项目,如果不是maven项目,就去Mina官网下载相应的jar包)

pom.xml

[java]  view plain  copy
 
  1. "http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  3.   4.0.0  
  4.   mina  
  5.   mina-test  
  6.   jar  
  7.   0.0.1-SNAPSHOT  
  8.   mina-test  
  9.   http://maven.apache.org  
  10.     
  11.       
  12.       junit  
  13.       junit  
  14.       4.10  
  15.       test  
  16.       
  17.       
  18.         org.apache.mina  
  19.         mina-core  
  20.         2.0.7  
  21.       
  22.       
  23.         org.slf4j  
  24.         slf4j-api  
  25.         1.7.6  
  26.       
  27.       
  28.         org.slf4j  
  29.         slf4j-log4j12  
  30.         1.7.6  
  31.       
  32.     
  33.   


接下来是服务端主程序

[java]  view plain  copy
 
  1. package com.zf.mina.test01;  
  2.   
  3. import java.io.IOException;  
  4. import java.net.InetSocketAddress;  
  5. import java.nio.charset.Charset;  
  6.   
  7. import org.apache.mina.core.service.IoAcceptor;  
  8. import org.apache.mina.core.session.IdleStatus;  
  9. import org.apache.mina.filter.codec.ProtocolCodecFilter;  
  10. import org.apache.mina.filter.codec.textline.TextLineCodecFactory;  
  11. import org.apache.mina.filter.logging.LoggingFilter;  
  12. import org.apache.mina.transport.socket.nio.NioSocketAcceptor;  
  13.   
  14. public class MinaTimeServer {  
  15.       
  16.     public static void main(String[] args) throws IOException {  
  17.           
  18.         //使用IoAcceptor来接收客户端的请求  
  19.         IoAcceptor acceptor = new NioSocketAcceptor() ;  
  20.         //加入内置的LoggingFilter,用户打印出一个请求过程中的信息  
  21.         acceptor.getFilterChain().addLast("logger"new LoggingFilter()) ;  
  22.         //使用Mina提供的ProtocolCodecFilter来对消息进行编码和解码,使用Mina提供的TextLineCodecFactory对消息进行分行处理  
  23.         acceptor.getFilterChain().addLast("codec"new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));  
  24.         //设置消息处理器,当接收到消息时,可以进行相应的业务操作  
  25.         acceptor.setHandler(new TimeServerHandler()) ;  
  26.         //配置Buffer大小  
  27.         acceptor.getSessionConfig().setReadBufferSize(2048);   
  28.         //如果Session在指定时间内没有事情做(读/写),那么就会触发Handler的sessionIdle方法  
  29.         acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10) ;  
  30.         //绑定好要监听的端口  
  31.         acceptor.bind(new InetSocketAddress(8080)) ;  
  32.           
  33.           
  34.     }  
  35.   
  36. }  


消息处理器

[java]  view plain  copy
 
  1. package com.zf.mina.test01;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import org.apache.mina.core.service.IoHandlerAdapter;  
  6. import org.apache.mina.core.session.IdleStatus;  
  7. import org.apache.mina.core.session.IoSession;  
  8.   
  9. /** 
  10.  * Server端的消息处理器 
  11.  * @author Administrator 
  12.  * 
  13.  */  
  14. public class TimeServerHandler extends IoHandlerAdapter{  
  15.   
  16.     /** 
  17.      * 当通信出现异常时会触发该方法 
  18.      */  
  19.     public void exceptionCaught(IoSession session, Throwable cause)  
  20.             throws Exception {  
  21.         cause.printStackTrace() ;  
  22.     }  
  23.       
  24.     /** 
  25.      * 当接收到客户端发来的消息时,此方法会被触发 
  26.      */  
  27.     public void messageReceived(IoSession session, Object message)  
  28.             throws Exception {  
  29.         String msg = message.toString() ; //获取客户端发来的消息  
  30.         if(msg.trim().equalsIgnoreCase("quit")){  
  31.             session.close(false) ;  
  32.             System.out.println("Session closed");  
  33.             return ;  
  34.         }  
  35.         System.out.println("收到客户端消息:" + msg);  
  36.         Date date = new Date() ;  
  37.         session.write(date.toLocaleString() ) ; //将消息发送给客户端  
  38.         System.out.println("Message wittern...");  
  39.     }  
  40.       
  41.     public void sessionIdle(IoSession session, IdleStatus status)  
  42.             throws Exception {  
  43.         System.out.println("IDLE " + session.getIdleCount(status) );    
  44.     }  
  45.       
  46. }  


此时服务端程序就编写完成了。 现在可以启动MinaTimeServer类了 。

然后打开命令行工具,输入如下命令:

telnet localhost 8080 

然后就可以输入内容了。 随便输入什么内容。 会看到会将客户端输入的内容输出, 并且在客户端会打印出当前系统时间

你可能感兴趣的:(【44】Mina)