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 NIO与BIO了解及Telnet简单测试-Getting Started

1.1.1. NIO回顾 1.1.1.1. NIO回顾    NIO API是java 1.4引入的,已经被大多数应用系统所采用。NIO API包含了非阻塞non-blocking应用操作。   ja...
  • boonya
  • boonya
  • 2016年06月01日 16:10
  • 2688

MINA 并发数 性能测

mina使用jmeter压力测试:500并发没有问题,但是500以上,机器就卡的不行,一启动,反应半天才运行,并发测试没法继续下去了。 测试mina最大连接数: package com.bla...

MINA框架中的编码解码以及对粘包断包的处理

我们都知道MINA中是使用责任链的方式来实现将二进制字节流数据转换为java对象,或者将java对象转换为二进制字节流数据的,那么这个转换过程到底是怎么进行的呢?这就涉及到MINA中的编码与解码问题了...

Mina学习(1):mina实现简单服务端与客户端

mina是一个基于javaNio网络通信应用框架,使用mina可以轻松的搭建服务器,接下来将使用mina搭建一个小型的服务端 jar下载: 源代码–MinaServer.java package se...

NIO通讯框架之阿堂教程:Mina学习笔记-入门篇(一)

在两三年前,阿堂在技术博客(http://blog.sina.com.cn/heyitang) 上曾经写过"JAVA新I/O学习系列笔记(1)"和"JAVA新I/O学习系列笔记(2)"两篇学习笔记...

一个Mina实例

本实例是参考Mina官网的实例更改的,也添加了自己的一些东西,也解决了有些同学遇到乱码的情况。 不多说了,直接放代码: 客服端: MimaTimeClient.java package minaEx...
  • hujunil
  • hujunil
  • 2013年08月12日 14:06
  • 13012

mina自定义编解码器接收处理byte数组(同时解决数据传输中的粘包、缺包问题)

我们在自定义传输协议时,通常都是采用字节数组的方式进行传送,如何正确接收和解码byte数组? 假设我们自定义了传输协议: 字节数组的前4个字节是要传输的数据长度,后面跟数据。我们用mina可以这...
  • jbgtwang
  • jbgtwang
  • 2014年05月19日 17:07
  • 12167

Mina基础框架及客户端-服务端框架对应实现例子

原文地址:Mina基础(Apache user guide Chapter2 basics)1.1.1. Mina应用架构    被问最多的问题就是,“Mina的基础应用看起来是什么样的呢?”。通过这...
  • boonya
  • boonya
  • 2016年06月01日 18:18
  • 2989

QuickServer开发指南(1)- 介绍

    QuickServer是一个免费的开源Java库,用于快速创建健壮的多线程、多客户端TCP服务器应用程序。使用QuickServer,用户可以只集中处理应用程序的逻辑/协议,从而方便的建立功能...

gadget编码与单元测试和service编写示例

gadget编码:function(title, projectCid, testCaseList, registrationDeadline, taskDeadline, callback) { ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mina快速编码测试验证示例
举报原因:
原因补充:

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