Apache Mina的学习应用一.docx

上传人:b****3 文档编号:488363 上传时间:2022-10-10 格式:DOCX 页数:7 大小:15.68KB
下载 相关 举报
Apache Mina的学习应用一.docx_第1页
第1页 / 共7页
Apache Mina的学习应用一.docx_第2页
第2页 / 共7页
Apache Mina的学习应用一.docx_第3页
第3页 / 共7页
Apache Mina的学习应用一.docx_第4页
第4页 / 共7页
Apache Mina的学习应用一.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

Apache Mina的学习应用一.docx

《Apache Mina的学习应用一.docx》由会员分享,可在线阅读,更多相关《Apache Mina的学习应用一.docx(7页珍藏版)》请在冰豆网上搜索。

Apache Mina的学习应用一.docx

ApacheMina的学习应用一

ApacheMina的学习应用

(一)

在一般的项目中使用Mina要求在发送消息前加密数据,在接收数据时解析数据。

在加密和解析需要自己定义相应的解析协议。

如果采用Mina是就可以简单省事的定义自己的解析和加密协议。

只需实现Mina自己的类库即可。

实现相应的方法即可。

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

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

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

MessageDecoder类

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

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

消息的加密类的基类:

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

importorg.apache.mina.core.buffer.IoBuffer;

importorg.apache.mina.core.session.IoSession;

importorg.apache.mina.filter.codec.ProtocolEncoderOutput;

importorg.apache.mina.filter.codec.demux.MessageEncoder;

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

/**

*加密消息头和消息的体的信息

*@authorlonggangbai

*

*@param

*/

publicabstractclassAbstractMessageEncoderimplementsMessageEncoder{

privatefinalinttype;

protectedAbstractMessageEncoder(inttype){

this.type=type;

}

/**

*加密的整个过程的

*/

@Override

publicvoidencode(IoSessionsession,Tmessage,ProtocolEncoderOutputout)throwsException

{

IoBufferbuf=IoBuffer.allocate(6);

//Enableauto-expandforeasierencoding

buf.setAutoExpand(true);

//加密消息头

buf.putShort((short)type);

buf.putInt(message.getSequence());

//加密消息体

encodeBody(session,message,buf);

buf.flip();

out.write(buf);

}

/**

*解析消息的体的方法的

*@paramsession

*@parammessage

*@paramout

*/

protectedabstractvoidencodeBody(IoSessionsession,Tmessage,IoBufferout);

}

消息的解密类的基类:

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

importorg.apache.mina.core.buffer.IoBuffer;

importorg.apache.mina.core.session.IoSession;

importorg.apache.mina.filter.codec.ProtocolDecoderOutput;

importorg.apache.mina.filter.codec.demux.MessageDecoder;

importorg.apache.mina.filter.codec.demux.MessageDecoderResult;

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

/**

*

*@authorlonggangbai

*

*/

publicabstractclassAbstractMessageDecoderimplementsMessageDecoder{

privatefinalinttype;

privateintsequence;

privatebooleanreadHeader;

protectedAbstractMessageDecoder(inttype){

this.type=type;

}

publicMessageDecoderResultdecodable(IoSessionsession,IoBufferin)

{

//当信息头(header)中没有读取时返回需要读取NEED_DATA

if(in.remaining()

returnMessageDecoderResult.NEED_DATA;

}

//如果类型和长度匹配返回OK

if(type==in.getShort())

{

returnMessageDecoderResult.OK;

}

//如果不匹配返回NOTOK

returnMessageDecoderResult.NOT_OK;

}

publicMessageDecoderResultdecode(IoSessionsession,IoBufferin,ProtocolDecoderOutputout)throwsException

{

//当信息头(header)中没有读取时返回需要读取NEED_DATA

if(!

readHeader){

//忽略此种类型

in.getShort();

sequence=in.getInt();

readHeader=true;

}

//获取消息的解析内容

AbstractMessagem=decodeBody(session,in);

//如果

if(m==null)

{

returnMessageDecoderResult.NEED_DATA;

}else{

//重新设置readerHeader为下一次解析作准备

readHeader=false;

}

m.setSequence(sequence);

out.write(m);

returnMessageDecoderResult.OK;

}

/**

*解析消息的body体的信息

*@paramsession

*@paramin

*@return

*/

protectedabstractAbstractMessagedecodeBody(IoSessionsession,IoBufferin);

}

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

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

importorg.apache.mina.core.buffer.IoBuffer;

importorg.apache.mina.core.session.IoSession;

importorg.apache.mina.filter.codec.ProtocolDecoderOutput;

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

import.unutrip.java.opensource.mina.sumup.message.AddMessage;

/**

*添加消息的解密解析器

*@authorlonggangbai

*

*/

publicclassAddMessageDecoderextendsAbstractMessageDecoder{

publicAddMessageDecoder(){

super(Constants.ADD);

}

/**

*解析消息体的过程

*/

@Override

protectedAbstractMessagedecodeBody(IoSessionsession,IoBufferin){

if(in.remaining()

{

returnnull;

}

AddMessagemessage=newAddMessage();

message.setValue(in.getInt());

returnmessage;

}

/**

*解析完毕的操作

*/

@Override

publicvoidfinishDecode(IoSessionsession,ProtocolDecoderOutputoutput)

throwsException{

}

}

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

importorg.apache.mina.core.buffer.IoBuffer;

importorg.apache.mina.core.session.IoSession;

import.unutrip.java.opensource.mina.sumup.message.AddMessage;

/**

*添加消息的加密解析器

*@authorlonggangbai

*

*@param

*/

publicclassAddMessageEncoderextendsAbstractMessageEncoder{

publicAddMessageEncoder(){

super(Constants.ADD);

}

@Override

protectedvoidencodeBody(IoSessionsession,Tmessage,IoBufferout){

out.putInt(message.getValue());

}

publicvoiddispose()throwsException{

}

}

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1