下午那篇博客我们讲到了Mina的客户端的开发,如果还有没看过的同学可以看一下,我是传送门。现在,我们来学习一下,Mina的服务器的开发。

 

  一、首先看一下,我的服务器的代码图片:

       【Andorid开发框架学习】之Mina开发之服务器开发服务器代码我是在MyEclipse下写的。

 

 

   二、服务器的整体思路:(同客户端差不多)

      • 首先,产生一个socket接收对象(SocketAcceptor),用于接收客户端的连接请求;
      • 然后,对这个接收器添加我们的I/O过滤器(SSL加密、日志过滤器、编码过滤器等,这里注意,如果添加SSL过滤器,那么一定要第一个添加,否则无法对数据加密);
      • 接下来,为连接设置I/O处理器,顾名思义就是处理接收到的消息(这里我们只能设置一个处理器,如果有设置多个,那么默认进入到最后一个I/O处理器中进行处理);
      • 最后,将服务器绑定到某端口(如:3456,最好是1024以上,因为1024以下的端口系统占用)。

 

   三、正式编码

      这里我同样展示几个比较重要的类来详细说明一下:

      • MinaServer.Java
         1 package com.mina.example;
         2 
         3 import java.io.IOException;
         4 import java.net.InetSocketAddress;
         5 
         6 import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
         7 import org.apache.mina.core.session.IdleStatus;
         8 import org.apache.mina.filter.codec.ProtocolCodecFilter;
         9 import org.apache.mina.filter.logging.LoggingFilter;
        10 import org.apache.mina.filter.ssl.SslFilter;
        11 import org.apache.mina.transport.socket.SocketAcceptor;
        12 import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
        13 
        14 import com.mina.charset.CharsetFactory;
        15 import com.mina.hanlder.MsgHanler;
        16 import com.mina.ssl.SSLContextGenerator;
        17 
        18 /**
        19  * <pre>
        20  * Project Name:MinaServer
        21  * Package:com.mina.example
        22  * FileName:MinaServer.java
        23  * Purpose:服务器
        24  * Create Time: 2014-8-19 下午4:59:55
        25  * Create Specification:
        26  * Modified Time:
        27  * Modified by:
        28  * Modified Specification:
        29  * Version: 1.0
        30  * </pre>
        31  * 
        32  * @author myp
        33  */
        34 public class MinaServer {
        35 
        36     private SocketAcceptor acceptor;
        37 
        38     public MinaServer() {
        39         /*
        40          * 1.创建一个socket连接,连接到服务器
        41          */
        42         acceptor = new NioSocketAcceptor();
        43     }
        44 
        45     public boolean start() {
        46         /*
        47          * 获取过滤器链,用于添加过滤器
        48          */
        49         DefaultIoFilterChainBuilder filterChain = acceptor.getFilterChain();
        50 
        51         /*
        52          * 2.为连接添加过滤器,SSL、日志、编码过滤器
        53          */
        54         // SSLContextGenerator是我们自己写的一个SSL上下文产生器,稍后会讲到
        55         SslFilter sslFilter = new SslFilter(
        56                 new SSLContextGenerator().getSslContext());
        57         // a.ssl过滤器,这个一定要第一个添加,否则数据不会进行加密
        58         filterChain.addLast("sslFilter", sslFilter);
        59         System.out.println("SSL support is added..");
        60         // b.添加日志过滤器
        61         filterChain.addLast("loger", new LoggingFilter());
        62         // c.添加字符的编码过滤器
        63         filterChain.addLast("codec", new ProtocolCodecFilter(
        64                 new CharsetFactory()));
        65 
        66         /*
        67          * 3.设置消息处理器,用于处理接收到的消息
        68          */
        69         acceptor.setHandler(new MsgHanler());
        70         // 设置空闲的时间是30s
        71         acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30);
        72         try {
        73             /*
        74              * 4.将服务器绑定到3456端口
        75              */
        76             acceptor.bind(new InetSocketAddress(3456));
        77         } catch (IOException e) {
        78             e.printStackTrace();
        79             return false;
        80         }
        81         return true;
        82     }
        83 
        84     public static void main(String[] args) {
        85         MinaServer server = new MinaServer();
        86         server.start();
        87     }
        88 }
        View Code

相关文章: