Mina第一次听到这个名称的时候,我以为是个MM的名字米娜,后来才知道…

Apache MINA(Multipurpose Infrastructure for Network Applications)

官网http://mina.apache.org/

是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。 目前正在使用 MINA 的软件包括有:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia Flash Media RTMP)、ObjectRADIUS、Openfire 等等。

本文就介绍入门mina的入门,

参考文档http://mina.apache.org/mina-project/quick-start-guide.html

第一步、定义MinaTimeServer.java mina服务端

/**

*

*/

package com.figo.onlineshop.test;

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;

/**

* @author zhuzhifei

*

*/

public class MinaTimeServer {

private static final int PORT = 9123;

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

//定义socket接收器

IoAcceptor acceptor = new NioSocketAcceptor();

//添加日志记录

acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );

//添加编码解码器

acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));

//添加处理器(用于接收数据后处理处理数据逻辑)

acceptor.setHandler(  new TimeServerHandler() );

//设置读取数据缓存单位byte

acceptor.getSessionConfig().setReadBufferSize( 2048 );

//设置多长时间后接收器开始空闲

acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );

try {

//绑定某个端口,作为数据入口

acceptor.bind( new InetSocketAddress(PORT) );

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

第二步、定义消息处理器TimeServerHandler.java

/**

*

*/

package com.figo.onlineshop.test;

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;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* @author zhuzhifei

*

*/

//必须继承IoHandlerAdapter

public class TimeServerHandler extends IoHandlerAdapter {

private final Logger logger = LoggerFactory.getLogger(MinaTimeServer.class);

//补抓异常

@Override

public void exceptionCaught(IoSession session, Throwable cause)

throws Exception {

// TODO Auto-generated method stub

super.exceptionCaught(session, cause);

}

//获取客户端消息后处理逻辑

@Override

public void messageReceived(IoSession session, Object message)

throws Exception {

// TODO Auto-generated method stub

super.messageReceived(session, message);

String str = message.toString();

if( str.trim().equalsIgnoreCase("quit") ) {

session.close(true);

return;

}

Date date = new Date();

session.write( "current time:"+date.toString() );//该消息将返回给客户端

System.out.println("Message Received:"+str);

logger.info(date.toString()+"Message Received:"+str);//日志没有输出why?

}

//发送消息

@Override

public void messageSent(IoSession session, Object message) throws Exception {

// TODO Auto-generated method stub

super.messageSent(session, message);

}

//当前会话关闭

@Override

public void sessionClosed(IoSession session) throws Exception {

// TODO Auto-generated method stub

super.sessionClosed(session);

}

//创建会话

@Override

public void sessionCreated(IoSession session) throws Exception {

// TODO Auto-generated method stub

super.sessionCreated(session);

}

//会话空闲

@Override

public void sessionIdle(IoSession session, IdleStatus status)

throws Exception {

// TODO Auto-generated method stub

super.sessionIdle(session, status);

System.out.println( "IDLE " + session.getIdleCount( status ));

}

//打开会话

@Override

public void sessionOpened(IoSession session) throws Exception {

// TODO Auto-generated method stub

super.sessionOpened(session);

}

}

第三步、模拟客户端tcp调用

MinaTimeServer.java run as java Application后

C:\Documents and Settings\zhuzhifei>telnet 127.0.0.1 9123 连上服务器

客户端输入:abc后

服务端接收到:

2012-12-25 18:26:52 INFO  com.figo.onlineshop.test.MinaTimeServer - Tue Dec 25 18:26:52 CST 2012Message Received:abc

客户端显示:current time:Tue Dec 25 18:26:52 CST 2012

Apache Mina入门的更多相关文章

  1. Apache Mina入门实例

    一.mina是啥 ApacheMINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的 ...

  2. Apache Mina 入门实例

    这个教程是介绍使用Mina搭建基础示例.这个教程内容是以创建一个时间服务器. 以下是这个教程需要准备的东西: MINA 2.0.7 Core JDK 1.5 或更高 SLF4J 1.3.0 或更高 L ...

  3. JAVA通信系列二:mina入门总结

    一.学习资料 Mina入门实例(一) http://www.cnblogs.com/juepei/p/3939119.html Mina入门教程(二)----Spring4 集成Mina http:/ ...

  4. Mina入门:mina版之HelloWorld

    一,前言: 在完成上篇文章<Mina入门:Java NIO框架Mina.Netty.Grizzly简介与对比>之后,我们现在可以正式切入Mina入门学习了. 二,搭建项目结构与解决项目依赖 ...

  5. Apache Mina -2

    我们可以了解到 mina是个异步通信框架,一般使用场景是服务端开发,长连接.异步通信使用mina是及其方便的.不多说,看例子. 本次mina 使用的例子是使用maven构建的,过程中需要用到的jar包 ...

  6. Mina入门:mina版之HelloWorld[z]

    Mina入门:mina版之HelloWorld [z] 一,前言: 在完成上篇文章<Mina入门:Java NIO框架Mina.Netty.Grizzly简介与对比>之后,我们现在可以正式 ...

  7. Mina入门实例(一)

    mina现在用的很多了,之前也有用到,但是毕竟不熟悉,于是查了一些资料,做了一些总结.看代码是最直观的,比什么长篇大论都要好.不过其中重要的理论,也要理解下. 首先是环境,程序运行需要几个包,这里用m ...

  8. Mina入门教程(二)----Spring4 集成Mina

    在spring和mina集成的时候,要十分注意一个问题:版本. 这是一个非常严重的问题,mina官网的demo没错,网上很多网友总结的代码也是对的,但是很多人将mina集成到spring中的时候,总是 ...

  9. Apache MiNa 实现多人聊天室

    Apache MiNa 实现多人聊天室 开发环境: System:Windows JavaSDK:1.6 IDE:eclipse.MyEclipse 6.6 开发依赖库: Jdk1.4+.mina-c ...

随机推荐

  1. UFLDL(五)自编码算法与稀疏性

    新教程内容太繁复,有空再看看,这节看的还是老教程: http://ufldl.stanford.edu/wiki/index.php/%E8%87%AA%E7%BC%96%E7%A0%81%E7%AE ...

  2. 深度学习国外课程资料(Deep Learning for Self-Driving Cars)+(Deep Reinforcement Learning and Control )

    MIT(Deep Learning for Self-Driving Cars) CMU(Deep Reinforcement Learning and Control ) 参考网址: 1 Deep ...

  3. 文件下载功能django+js

    1. 功能叙述 前端web页面通过访问url+id的形式访问url lottery/draw/(?P<pk>(\d+))/download/ 后端代码通过orm查询pk相关数据 过滤出自己 ...

  4. Java 之 JDBC

    mysql : //****** 四大金刚: 驱动类名.url.用户名.密码 //MySQL四大金刚 String driverClassname="com.mysql.jdbc.Drive ...

  5. ASP.NET WebAPI 01-Demo

    WebAPI作为构建RESTful的平台出来有段时间了,加上最近也在用,所以想把自己的心得记录下来.我就以一个简单的增删查改作为开篇. 准备 实体类(Figure)的定义. public class ...

  6. Hadoop自定义类型处理手机上网日志

    job提交源码分析 在eclipse中的写的代码如何提交作业到JobTracker中的哪?(1)在eclipse中调用的job.waitForCompletion(true)实际上执行如下方法 con ...

  7. HTML Input 表单校验之datatype

    凡要验证格式的元素均需绑定datatype属性,datatype可选值内置有10类,用来指定不同的验证格式. 如果还不能满足您的验证需求,可以传入自定义datatype,自定义datatype是一个非 ...

  8. Python内存管理方式和垃圾回收算法解析

    在列表,元组,实例,类,字典和函数中存在循环引用问题.有 __del__ 方法的实例会以健全的方式被处理.给新类型添加GC支持是很容易的.支持GC的Python与常规的Python是二进制兼容的. 分 ...

  9. python2.7 关于打印中文的各种方法

    目录 str类型的中文 第一种姿势:逐个打印 第二种姿势: json dumps 第三种姿势: repr string_escape 第四种姿势:PEP3140 unicode类型的中文 当str与u ...

  10. Collection模块

    一.nametuple--factory function for creating tuple subclasses with named fields 创建类似于元祖的数据类型,除了能够用索引来访 ...