`
longgangbai
  • 浏览: 7331552 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Apache Mina的学习应用(一)

阅读更多

          在一般的项目中使用Mina要求在发送消息前加密数据,在接收数据时解析数据。在加密和解析需要自己定义相应的解析协议。如果采用Mina是就可以简单省事的定义自己的解析和加密协议。 只需实现Mina自己的类库即可。实现相应的方法即可。

   如在客户端发送消息先加密,在服务端进行解密,服务端把执行的结果封装成对象之后,先加密之后发送到客户端,客户端,接收到信息后在解密的过程,也是多数mina应用的过程。

 

  首先定义自己的协议基类:

自定义消息体必须是实现MINA的消息的加密类MessageEncoder类 和消息的解密类:MessageDecoder 类

 

 

针对客户端消息Message 和ResultMessage 的不同解析过程主要为消息体的解析。

在消息的加密和解密基类中定义一些公共 的方法。

 

 

消息的加密类的基类:

 package cn.com.unutrip.java.opensource.mina.sumup.codec;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolEncoderOutput;
import org.apache.mina.filter.codec.demux.MessageEncoder;

import cn.com.unutrip.java.opensource.mina.sumup.message.AbstractMessage;

/**
 * 加密消息头和消息的体的信息
 * @author longgangbai
 *
 * @param <T>
 */
public abstract class AbstractMessageEncoder<T extends AbstractMessage> implements MessageEncoder<T> {
      private final int type;
      protected AbstractMessageEncoder(int type){
    this.type=type;
      }
     
      /**
       * 加密的整个过程的
       */
      @Override
      public void encode(IoSession session ,T message ,ProtocolEncoderOutput out)throws Exception
      {
   IoBuffer buf=IoBuffer.allocate(6);
          //Enable auto-expand for easier encoding
   buf.setAutoExpand(true);
   //加密 消息头
   buf.putShort((short)type);
   buf.putInt(message.getSequence());
   //加密消息体
   encodeBody(session, message, buf);
          buf.flip();
          out.write(buf);
      }
      /**
       * 解析消息的体的方法的
       * @param session
       * @param message
       * @param out
       */
      protected abstract void encodeBody(IoSession session ,T message ,IoBuffer out);
}

 

消息的解密类的基类:

package cn.com.unutrip.java.opensource.mina.sumup.codec;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolDecoderOutput;
import org.apache.mina.filter.codec.demux.MessageDecoder;
import org.apache.mina.filter.codec.demux.MessageDecoderResult;

import cn.com.unutrip.java.opensource.mina.sumup.message.AbstractMessage;
/**
 *
 * @author longgangbai
 *
 */
public abstract class AbstractMessageDecoder implements MessageDecoder{
     private final int type;
     private int sequence;
     private boolean readHeader;
 
     protected AbstractMessageDecoder(int type){
         this.type=type;
     }
     public MessageDecoderResult decodable(IoSession session ,IoBuffer in)
     {
  //当信息头(header)中没有读取时返回需要读取 NEED_DATA
         if(in.remaining()<Constants.HEADER_LEN){
              return MessageDecoderResult.NEED_DATA;
         }
         //如果类型和长度匹配返回 OK
         if(type==in.getShort())
         {
            return  MessageDecoderResult.OK;
         }
         //如果不匹配返回NOT OK
        return MessageDecoderResult.NOT_OK; 
     }
    
    
     public MessageDecoderResult decode(IoSession session ,IoBuffer in,ProtocolDecoderOutput out)throws Exception
     {
  //当信息头(header)中没有读取时返回需要读取 NEED_DATA
         if(!readHeader){
             //忽略此种类型
             in.getShort();
             sequence=in.getInt();
             readHeader=true;
         }
         // 获取消息的解析内容
         AbstractMessage m=decodeBody(session, in);
         //如果
         if(m==null)
         {
            return  MessageDecoderResult.NEED_DATA;
         }else{
             //重新设置readerHeader 为下一次解析作准备
             readHeader=false;
         }
         m.setSequence(sequence);
         out.write(m);
        return MessageDecoderResult.OK; 
     }
     /**
      * 解析消息的body体的信息
      * @param session
      * @param in
      * @return
      */
     protected abstract AbstractMessage decodeBody(IoSession session ,IoBuffer in);
}

 

Message消息体的加密和解密过程:

package cn.com.unutrip.java.opensource.mina.sumup.codec;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolDecoderOutput;

import cn.com.unutrip.java.opensource.mina.sumup.message.AbstractMessage;
import cn.com.unutrip.java.opensource.mina.sumup.message.AddMessage;

/**
 * 添加消息的解密解析器
 * @author longgangbai
 *
 */
public class AddMessageDecoder extends AbstractMessageDecoder {

    public AddMessageDecoder(){
  super(Constants.ADD);
    }
    /**
     * 解析消息体的过程
     */
    @Override
    protected AbstractMessage decodeBody(IoSession session, IoBuffer in) {
         if(in.remaining()<Constants.ADD_BODY_LEN)
         {
             return null;
         }
         AddMessage message=new AddMessage();
         message.setValue(in.getInt());
 return message;
    }
    /**
     * 解析完毕的操作
     */
    @Override
    public void finishDecode(IoSession session, ProtocolDecoderOutput output)
     throws Exception {
    }

}

 

 

package cn.com.unutrip.java.opensource.mina.sumup.codec;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;

import cn.com.unutrip.java.opensource.mina.sumup.message.AddMessage;
/**
 *  添加消息的加密解析器
 * @author longgangbai
 *
 * @param <T>
 */
public  class AddMessageEncoder<T extends AddMessage> extends AbstractMessageEncoder<T> {
         public AddMessageEncoder() {
             super(Constants.ADD);
        }

 @Override
 protected void encodeBody(IoSession session, T message, IoBuffer out) {
     out.putInt(message.getValue());
 }
 public  void dispose()throws Exception{
            
        }
}

 

 

 

 文章尚未写完,请关注下文。

 

 

分享到:
评论

相关推荐

    apache Mina的完整学习资料

    Apache Mina是一个开源框架,主要用于构建高性能、高可用性的网络应用程序。这个压缩包包含了全面的学习资料,适合初学者深入理解Mina的原理和使用方法。其中,中文参考手册的加入使得学习过程更加友好,便于非英语...

    apache mina 学习笔记三(子项目FtpServer)

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,用于构建高性能、高可用性的网络应用程序。MINA 提供了一种简单而强大的API,开发者可以使用它来处理TCP/IP和UDP/IP协议,如...

    Apache mina2学习笔记DEMO

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专为高性能、异步网络应用程序设计。MINA 提供了一套高级的网络通信抽象层,简化了开发过程,特别是对于处理TCP/IP和UDP/IP...

    apache-mina-2.0.4.rar_apache mina_mina

    对于希望提高网络应用性能或熟悉Java NIO编程的开发者来说,Apache Mina 2.0.4的源码分析是一次宝贵的学习机会。你可以通过阅读源码学习到如何有效地处理高并发场景,如何设计和实现高效的网络协议,以及如何利用...

    一个Apache MINA使用案例源代码ApacheMina

    Apache MINA是一个高性能、异步事件驱动的网络应用程序框架,主要设计用于简化开发服务器端的高性能网络应用。这个框架提供了一种抽象层,允许开发者使用相同的API处理多种不同的传输协议,如TCP/IP、UDP/IP以及SSL/...

    Apache Mina帮助文档

    Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务端应用程序。它提供了事件驱动、异步I/O处理模型,使得开发者能够更专注于业务逻辑,而不是底层网络编程的复杂性。Mina主要应用于Java...

    Apache Mina 入门Demo

    Apache Mina是一个开源项目,主要用于构建高性能、高可用性的网络通信应用。它是Java语言开发的,提供了一套简单而强大的API,使得开发者可以方便地创建网络服务器和客户端应用程序。Mina的目标是简化网络编程,使其...

    Apache MINA 2.0 用户指南( 缺第一章节)

    Apache MINA 2.0 是一款高性能且易于使用的网络应用程序框架,它简化了开发人员在网络编程方面的负担,允许开发者专注于应用程序的核心功能,而不是底层的网络细节。MINA 2.0 支持多种网络协议,包括 TCP 和 UDP,...

    apache mina实例免费下载

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,主要设计用于简化网络应用程序的开发,尤其是基于TCP和UDP协议的应用。它提供了高度可扩展和高性能的非阻塞I/O模型,使得...

    apache-mina-2.0.4架包及源码各pdf学习教程

    apache-mina-2.0.4 架包 源码 学习教程.apache mina是Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序...

    Apache MINA框架相关资料

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发高质量的网络服务。这个框架适用于多种协议,如TCP/IP和UDP/IP,以及NIO(非...

    Apache Mina Server 2.0 抢鲜体验

    Apache Mina Server 2.0 是一款高性能、可扩展的网络通信框架,广泛应用于开发网络应用服务器,如TCP/IP和UDP服务。这个框架允许开发者用Java编写高效的网络应用程序,简化了网络编程的复杂性。Mina 2.0 版本在前一...

    apache mina-spring 服务端程序

    Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高并发的网络应用程序,如服务器端应用。它提供了一种简单而强大的编程模型,使得开发者可以专注于业务逻辑,而不是底层的网络通信细节。Spring...

    apache-mina例子

    Apache Mina是一个开源项目,主要用于构建高性能、高可用性的网络应用程序。这个例子是关于如何使用Apache Mina实现一个简单的服务端和客户端通信的示例。在这个案例中,`MinaTimeServer`是服务端程序,它负责监听...

    Apache-Mina-2.rar_apache mina_java mina_mina_mina-core-1.1.3

    Apache Mina是一个强大的开源项目,专门设计用于构建网络应用程序。这个框架的核心目标是提供一个抽象层,使得开发者能够专注于业务逻辑,而不是底层网络通信的复杂性。标题中的"Apache-Mina-2.rar"和"mina-mina-...

    Apache mina源代码框架解析

    Apache Mina是一个用Java编写的网络通信框架,它简化了创建高性能、高可用性的网络服务的过程。Mina的核心思想是提供一个与传输层协议无关的API,使得开发者可以专注于业务逻辑,而不需要关心底层的网络通信细节。在...

    apache-mina源码

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专为开发高性能和高可用性的网络应用程序而设计。MINA提供了异步的、事件驱动的网络应用编程接口(API),适用于TCP和UDP协议...

    Apache Mina简单实例

    Apache Mina是一个开源的Java框架,它简化了网络应用程序的开发,特别是对于TCP/IP和UDP协议的应用。在本文中,我们将通过一个简单的实例来探讨如何使用Apache Mina进行网络通信。 首先,Apache Mina的核心是它的...

    apache mina 简单示例

    Apache Mina是一个开源框架,主要用于构建高性能、高可用性的网络应用程序。它提供了异步事件驱动的网络应用编程接口(API),适用于TCP/IP和UDP/IP协议,如Socket和SSL/TLS。Mina的目标是简化网络编程,使开发者...

Global site tag (gtag.js) - Google Analytics