`
tianting_wx
  • 浏览: 42691 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

初学mina的例子!

    博客分类:
  • mina
阅读更多

mina(Multipurpose Infrastructure for Network Applications) 是apache的顶级项目之一,用于构造异步连接的各种网络应用
一个高性能 Java 异步并发网络通讯框架。利用 Mina 可以高效地完成以下任务:

TCP/IP 和 UDP/IP 通讯
串口通讯
VM 间的管道通讯
SSL/TLS
JXM 集成
IoC 容器集成( Spring 、 Pico 等)
状态机

二、最简单的使用实例

package com.test.mina; 
import java.io.IOException; 
import java.net.InetSocketAddress; 
import java.nio.charset.Charset; 

import org.apache.mina.common.ByteBuffer; 
import org.apache.mina.common.IoAcceptor; 
import org.apache.mina.common.SimpleByteBufferAllocator; 
import org.apache.mina.filter.LoggingFilter; 
import org.apache.mina.filter.codec.ProtocolCodecFilter; 
import org.apache.mina.filter.codec.textline.TextLineCodecFactory; 
import org.apache.mina.transport.socket.nio.SocketAcceptor; 
import org.apache.mina.transport.socket.nio.SocketAcceptorConfig; 

public class MinaTimeServer { 

    private static final int PORT = 9123; 

    public static void main(String[] args) throws IOException { 
        //设置buffer 
        ByteBuffer.setUseDirectBuffers(false); 
        ByteBuffer.setAllocator(new SimpleByteBufferAllocator()); 
        //定义acceptor 
        IoAcceptor acceptor = new SocketAcceptor(); 
        //定义config 
        SocketAcceptorConfig cfg = new SocketAcceptorConfig(); 
        //设置config,加入filter 
        cfg.getSessionConfig().setReuseAddress( true ); 
        cfg.getFilterChain().addLast( "logger", new LoggingFilter() ); 
        cfg.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" )))); 
        //加入port handler cfg 
        acceptor.bind( new InetSocketAddress(PORT), new TimeServerHandler(), cfg); 
        System.out.println("MINA Time server started."); 
    } 
} 

 

  对应的handler,handler的作用是在对应的网事件的处理代码 
 

package com.test.mina; 
import java.util.Date; 

import org.apache.mina.common.IdleStatus; 
import org.apache.mina.common.IoHandlerAdapter; 
import org.apache.mina.common.IoSession; 
import org.apache.mina.common.TransportType; 
import org.apache.mina.transport.socket.nio.SocketSessionConfig; 

public class TimeServerHandler extends IoHandlerAdapter { 
    public void exceptionCaught(IoSession session, Throwable t) throws Exception { 
        t.printStackTrace(); 
        session.close(); 
    } 

    public void messageReceived(IoSession session, Object msg) throws Exception { 
        String str = msg.toString(); 
        //如果是quit就关闭session退出 
        if( str.trim().equalsIgnoreCase("quit") ) { 
            session.close(); 
            return; 
        } 
        //否则打印当前日期 
        Date date = new Date(); 
        session.write( date.toString() ); 
        System.out.println("Message written"); 
    } 

    public void sessionCreated(IoSession session) throws Exception { 
        System.out.println("Session created"); 

        if( session.getTransportType() == TransportType.SOCKET ) 
            ((SocketSessionConfig) session.getConfig() ).setReceiveBufferSize( 2048 ); 

        session.setIdleTime( IdleStatus.BOTH_IDLE, 10 ); 
   } 
}

 

 

三、使用方法:


编译上边两个类(必须先加入下面三个包,mina的jar文件),然后运行MinaTimeServer 
开始->运行->cmd进入控制台
telnet 127.0.0.1 9123
输入hello
得到当前日期
输入quit关闭session。

 

 

分享到:
评论

相关推荐

    mina2服务端客户端实例,保证能够正常运行

    标签中的"mina"和"mina2"指代Apache MINA框架的不同版本,"例子"表示这是一个示例代码集合,"服务端"和"客户端"则明确了示例涵盖了网络通信的两端——服务器端和客户端的实现。 根据提供的压缩包文件名称列表"mina...

    mina开发实例

    "这句话暗示了这个压缩包可能包含了一些易于理解的示例代码,旨在帮助初学者快速上手Mina。这些例子可能涵盖了如何创建服务器端、客户端,以及如何处理各种网络事件,如数据接收、发送、连接管理和断开等。 在实际...

    mina开发步骤

    根据提供的文件信息,我们可以深入探讨Mina框架的开发步骤及相关配置细节。Mina(Multi-threaded IO Network Abstraction)是...此外,对于初学者来说,理解这些基本概念是非常重要的,它们是掌握Mina框架的关键所在。

    mina sslfilter大用法

    这个例子是一个很好的起点,可以帮助初学者理解如何在Mina框架中集成安全功能。如果有任何问题或需要进一步的帮助,可以联系pengli.bj@163.com获取支持。记住,安全无小事,正确配置和使用`SslFilter`对于保护用户...

    MINA2实用手册

    MINA2实用手册对于初学者来说是一个很好的学习资源,因为它涵盖了如何初始化服务端和客户端,以及配置各种关键参数。 一、服务端初始化及参数配置 服务端的初始化主要涉及以下几个步骤: 1. **创建Acceptor**: ...

    基于MINA构建简单高性能的NIO应用_曾冠东

    无论是对于初学者还是经验丰富的开发者而言,MINA都值得深入了解和学习。通过合理利用MINA提供的特性,开发者可以极大地提高网络应用程序的性能和稳定性,从而更好地满足现代互联网应用的高并发需求。

    通信测试例子,大家有空可以玩一下

    标题提到的"通信测试例子"可能是指一个用于教学或实践的示例项目,旨在帮助初学者或开发者理解通信协议、网络连接以及数据传输的基本原理。描述中的重复内容可能是由于误输入,我们主要关注标题和标签提供的信息。 ...

    短消息发送库C#例子代码

    而`SMSreadSend_demo`很可能是示例代码或者测试程序,展示了如何使用这个库来发送和接收短信,这对于初学者快速上手非常有帮助。 在实际使用过程中,开发者需要了解如何创建GSM modem的实例,配置端口参数,如何...

    netty入门例子--(不是翻译官方文档)

    这个“netty入门例子”旨在帮助初学者理解Netty的基本用法和特性,而不是简单地翻译官方文档,它提供了几个开发模板,以便于深入理解Netty中的消息异步通信机制和TCP通信的封装。 首先,Netty的核心是它的异步模型...

    mima框架所需的包集合

    7. **mina-examples**:示例代码或者教程,帮助初学者快速理解和上手MIMA框架,这些例子通常涵盖了基础用法和一些高级特性。 8. **mina-docs**:文档和API参考,是开发者了解框架功能、方法和最佳实践的重要资源。 ...

    juery框架写的弹窗效果适合新手

    在这个例子中,开发者使用的是`<script>`标签来引入jQuery 1.4版本的文件。这一步是必不可少的,因为所有jQuery的功能都将基于这个库。 ```html <script language="javascript" src="jquery-1.4.js"></script> ``` ...

    camel-manual-2.4.0, 用户手册

    这部分包含了一系列实用的例子,旨在帮助开发者解决常见的集成问题,例如: - **文件传输**:演示如何使用 Camel 进行文件传输。 - **消息转换**:展示如何将不同格式的消息转换为统一格式。 - **异步处理**:介绍...

    JAVA上百实例源码以及开源项目源代码

    Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...

    dubbo源码解析2

    在开始深入解析Dubbo源码之前,首先需要明确的是,Dubbo虽然代码量不算庞大,但是它涉及的技术领域非常广泛,对于初学者来说,可能需要具备一定的前置知识才能更好地理解和学习。以下是建议的学习路径: 1. **Java...

Global site tag (gtag.js) - Google Analytics