Mina框架实现最简单的服务端(二)
2016-03-31 19:21
239 查看
编解码工厂。因为网络通讯过程中用的协议不一样,不同协议的消息格式不同,所以需要有编解码器实现字节流到具体消息对象的转换。通常在解码过程中如果出现解码错误,说明消息在传递过程中可能存在丢失或更改的情况,这时需要将与客户端的会话关闭。
package minabase.server; import org.apache.mina.filter.codec.demux.DemuxingProtocolCodecFactory; import org.apache.mina.filter.codec.demux.MessageDecoder; import org.apache.mina.filter.codec.demux.MessageEncoder; /** * Class Description: 编解码工厂 * Copyright: Copyright (c) * */ public class MyCodecFactory extends DemuxingProtocolCodecFactory { private MessageDecoder decoder; private MessageEncoder<String> encoder; // 注册编解码器 public MyCodecFactory(MessageDecoder decoder, MessageEncoder<String> encoder) { this.decoder = decoder; this.encoder = encoder; addMessageDecoder(this.decoder); addMessageEncoder(String.class, this.encoder); } }编码器
package minabase.server; import java.nio.charset.CharacterCodingException; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; 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; /** * Class Description: 编码器,在每个消息后面加\n * Copyright: Copyright (c) * */ public class MyCodecEncoder implements MessageEncoder<String> { private CharsetEncoder cecoder; public MyCodecEncoder(Charset charset) { cecoder = charset.newEncoder(); } @Override public void encode(IoSession session, String in, ProtocolEncoderOutput out) throws Exception { IoBuffer buf = IoBuffer.allocate(100).setAutoExpand(true); String strMsg = in.toString(); try { buf.putString(strMsg, cecoder); buf.put((byte)'\n'); } catch (CharacterCodingException e) { //log } buf.flip(); out.write(buf); } }
相关文章推荐
- 嵌套查询的查询优化
- 推荐!手把手教你使用Git
- 第四周
- 史上最详细的ConcurrentHashMap详解--源码分析
- 学习OpenCV2——CamShift之目标跟踪
- 1020_层次遍历二叉树
- 处理不等高TableViewCell
- android studio 开发常用快捷键
- IOS根据date计算时间差
- 1022. Digital Library (30)
- 工厂方法模式
- ArrayList类
- eclipse 全局替换
- HDU-1561 The more, The Better (树形DP+分组背包)
- 静态方法输出参数统计大写字母、小写字母、数字、其他字符的个数
- 【GDOI2103模拟3.17】数树数
- Android 透明度百分比对比表
- git学习(一)---- 历史与原理
- ubuntu安装jdk
- 【Notification】屏蔽特定应用的通知提示