Mina快速编码测试验证示例

原创 2016年06月01日 11:52:02

此文借鉴于Apache Mina 官网Apache Mina快速入门指南(Quick start guide)

NIO服务端接收器

package com.boonya.mina.quickstart;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

/**
 * MinaTimeServer 服务端
 * 
 * @packge com.boonya.mina.quickstart.MinaTimeServer
 * @date 2016年6月1日 上午9:49:34
 * @author pengjunlin
 * @comment
 * @update
 */
public class MinaTimeServer {
	
	 // 定义一个NioSocketAcceptor(服务端)监听端口
	 private static final int PORT = 9123;
	
	/**
	 * @throws IOException 
	 * 主函数
	 * 
	 * @MethodName: main
	 * @Description:
	 * @param args
	 * @throws
	 */
	public static void main(String[] args) throws IOException {
		// 第一步,我们需要一个监听进来的链接:一个基于TCP/IP的SocketAcceptor
		IoAcceptor acceptor = new NioSocketAcceptor();

		// 添加过滤器配置,过滤器会日志记录最新的session和接收到的消息
		acceptor.getFilterChain().addLast("logger", new LoggingFilter());
		// 将二进制数据转化为协议对应的消息类型,TextLineCodecFactory处理text类型的数据
		acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));

		// 使用对应的服务器handler 被用于与客户端提供请求时间服务
		acceptor.setHandler(new TimeServerHandler());

		// 设置被用户客户端请求的NioSocketAcceptor 设置
		// 对buffer设定缓冲区大小,目的是告知潜在的操作系统分配多大空间去处理进来的消息
		acceptor.getSessionConfig().setReadBufferSize(2048);
		// 指定空闲session的空闲时间,IdleStatus设置超时action
		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
		
		// 绑定服务端socket通信端口
		acceptor.bind( new InetSocketAddress(PORT) );
	}

}

NIO消息处理器

package com.boonya.mina.quickstart;

import java.util.Date;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

/**
 * 时间服务器端-消息处理器
 * 
 * @packge com.boonya.mina.quickstart.TimeServerHandler
 * @date 2016年6月1日 上午9:55:42
 * @author pengjunlin
 * @comment Mina中*Handler继承自IoHandler
 * @update
 */
public class TimeServerHandler extends IoHandlerAdapter {
	/**
	 * 处理异常捕获方法(如不定义此方法,异常可能不会被正确捕获)
	 */
	@SuppressWarnings("deprecation")
	@Override
	public void exceptionCaught(IoSession session, Throwable cause)	throws Exception {
		// 打印异常输出
		cause.printStackTrace();
		// 有时候需要关闭session,根据实际情况决定
		session.close();
	}

	/**
	 * 消息接收处理方法
	 */
	@SuppressWarnings("deprecation")
	@Override
	public void messageReceived(IoSession session, Object message)	throws Exception {
		String str = message.toString();
		// 如果从客户端接收到'quit'指令,session将会被关闭
		if (str.trim().equalsIgnoreCase("quit")) {
			session.close();
			return;
		}
		// 根据str指令做相应的处理
		

		Date date = new Date();
		// write back to the client,如果没有定义codec,收到的数据是一个IoBuffer object(此处没有采用message)
		session.write(date.toString());
		System.out.println("Message written...");
	}

	/**
	 * session空闲处理方法
	 */
	@Override
	public void sessionIdle(IoSession session, IdleStatus status)throws Exception {
		System.out.println("IDLE " + session.getIdleCount(status));
	}

}

Telnet客户端测试

首先检查开启你的操作系统telnet服务,我使用的是win7系统,设置如下图所示:

然后,cmd命令窗口执行:telnet   [host]  [port],如不知道本地机器的IP地址,ipconfig查找自己的局域网IP(当然,你也可以使用127.0.0.1或localhost)。侧视图如下所示:

执行成功后会弹出一个黑色窗口;

执行指令窗口(输入任意字符,输入'quit'命令停止):



版权声明:本文为博主原创文章,未经博主允许不得转载。

mina框架分析:自定义编码解码

mina支持自定义编码和解码,
  • kingmicrosoft
  • kingmicrosoft
  • 2014年09月10日 11:07
  • 1686

mina简单编解码器示例

下面我们举一个模拟电信运营商短信协议的编解码器实现,假设通信协议如下所示: M sip:wap.fetion.com.cn SIP-C/2.0 S: 1580101xxxx R: 1889020xxx...
  • maoyeqiu
  • maoyeqiu
  • 2015年07月27日 20:11
  • 885

mina框架自定义解编码器

之前学习mina的时候参考了http://blog.csdn.net/w13770269691/article/details/8614584 这篇文章,但是发现里面的自定义解编码器错误多多,于是自己...
  • qq_17632417
  • qq_17632417
  • 2017年05月18日 08:51
  • 582

mina 2.07 官方举例 MinaTimerServer 中的类关系

一、代码1、主类package org.soachina; import java.io.IOException; import java.net.InetSocketAddress; import...
  • teamlet
  • teamlet
  • 2013年05月18日 22:10
  • 2573

Mina学习(4):实现自定义编解码器并解决半包,丢包,粘包问题

一、编码器:将要发送的数据转化成byte[] 进行传输 自定义编码器的实现: package filter;import org.apache.mina.core.buffer.IoBuffer; i...
  • c1481118216
  • c1481118216
  • 2016年10月15日 22:58
  • 2890

MINA 并发数 性能测

mina使用jmeter压力测试:500并发没有问题,但是500以上,机器就卡的不行,一启动,反应半天才运行,并发测试没法继续下去了。 测试mina最大连接数: [java...
  • novelly
  • novelly
  • 2013年12月17日 20:59
  • 2295

mina+webSocket 搭建兼容各版本浏览器无刷新评论实例

webSocket是html5的东西,目前还有好多浏览器是不兼容的,
  • k_769915435
  • k_769915435
  • 2014年08月13日 17:33
  • 5396

Mina Codec Filter对应协议实现编解码处理

原文地址:Mina Filter(Apache Mina user guide Chapter 9 Codec Filter) 本教程试图解释为什么以及如何使用ProtocolCodecFilter....
  • boonya
  • boonya
  • 2016年06月07日 11:55
  • 3164

《Apache MINA 2.0 用户指南》第九章:编解码器过滤器

本章对 MINA 的协议编解码过滤器进行了深入讨论,先后介绍了协议编解码过滤器的使用原因和如何使用。最后用一个 demo 演示了协议编解码过滤器的具体使用。...
  • defonds
  • defonds
  • 2014年01月13日 16:12
  • 5913

Apache mina2 用户指南(九)编解码过滤器

本文解释一下为什么以及如何使用一个 ProtocolCodecFilter。         为什么要使用一个 ProtocolCodecFilter? TCP 担保以正确的顺序交...
  • u012506661
  • u012506661
  • 2016年09月28日 22:45
  • 102
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mina快速编码测试验证示例
举报原因:
原因补充:

(最多只允许输入30个字)