`
birdmen
  • 浏览: 38507 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多
1.SERVER端程序和配置
程序 MinaServer.java:
package com.sillycat.manager.impl;


import java.net.InetSocketAddress;

import org.apache.mina.common.IoAcceptor;
import org.apache.mina.filter.LoggingFilter;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.transport.socket.nio.SocketAcceptor;
import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;

public class MinaServer {
private static final int SERVER_PORT = 8080;    
    
    public static void main( String[] args ) throws Throwable    
    {    
        IoAcceptor acceptor = new SocketAcceptor();    
            
        // Prepare the service configuration.    
        SocketAcceptorConfig cfg = new SocketAcceptorConfig();    
        cfg.setReuseAddress( true );    
   
        cfg.getFilterChain().addLast(    
                    "codec",    
                    new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) );    
        cfg.getFilterChain().addLast( "logger", new LoggingFilter() );    
   
        acceptor.bind(    
                new InetSocketAddress( SERVER_PORT ),    
                new MinaServerSessionHandler( ), cfg );    
        System.out.println( "The server Listening on port " + SERVER_PORT );    
    }    
}

SERVER端的处理类MinaServerSessionHandler.java:
package com.sillycat.manager.impl;

import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;
import org.apache.mina.util.SessionLog;
import com.sillycat.model.Message;

public class MinaServerSessionHandler extends IoHandlerAdapter {
public void sessionOpened(IoSession session) {
   // set idle time to 60 seconds
   session.setIdleTime(IdleStatus.BOTH_IDLE, 60);
   session.setAttribute("times", new Integer(0));
}

public void messageReceived(IoSession session, Object message) {
   System.out.println("in messageReceived");
   int times = ((Integer) (session.getAttribute("times"))).intValue();
   System.out.println("tiems = " + times);
   // communicate 30 times,then close the session.
   if (times < 1) {
    times++;
    session.setAttribute("times", new Integer(times));
    Message msg;
    msg = (Message) message;
    msg.setMsgBody("in server side: " + msg.getMsgBody());
    System.out.println("begin send msg: " + msg.getMsgBody());
    session.write(msg);
   } else {
    session.close();
   }
}
public void sessionIdle(IoSession session, IdleStatus status) {
   SessionLog.info(session, "Disconnecting the idle.");
   // disconnect an idle client
   session.close();
}
public void exceptionCaught(IoSession session, Throwable cause) {
   // close the connection on exceptional situation
   session.close();
}
}


2.CLIENT的程序和配置
CLIENT类MinaClient.java:
package com.sillycat.manager.impl;

import java.net.InetSocketAddress;

import org.apache.mina.common.IoSession;
import org.apache.mina.filter.LoggingFilter;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.transport.socket.nio.SocketConnector;
import org.apache.mina.transport.socket.nio.SocketConnectorConfig;

import com.sillycat.model.Message;

public class MinaClient {
private static final String HOSTNAME = "localhost";    
    private static final int PORT = 8080;    
    private static final int CONNECT_TIMEOUT = 30; // seconds    
   
   
    public static void main( String[] args ) throws Throwable    
    {    
        SocketConnector connector = new SocketConnector();            
        // Configure the service.    
        SocketConnectorConfig cfg = new SocketConnectorConfig();    
        cfg.setConnectTimeout( CONNECT_TIMEOUT );    
          cfg.getFilterChain().addLast(    
                    "codec",    
                    new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) );    
   
        cfg.getFilterChain().addLast( "logger", new LoggingFilter() );    
            
        IoSession session;    
        Message msg = new Message(0,1,"hello");    
        connector.connect(new InetSocketAddress( HOSTNAME, PORT ),    
                        new MinaClientSessionHandler(msg), cfg );    
   
    }   

}


CLIENT的实现类MinaClientSessionHandler.java:
package com.sillycat.manager.impl;

import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;
import org.apache.mina.util.SessionLog;

import com.sillycat.model.Message;

public class MinaClientSessionHandler extends IoHandlerAdapter {
private Object msg;

public MinaClientSessionHandler(Object msg) {
   this.msg = msg;
}

public void sessionOpened(IoSession session) {
   session.write(this.msg);
}

public void messageReceived(IoSession session, Object message) {
   System.out.println("in messageReceived!");
   Message rm = (Message) message;
   SessionLog.debug(session, rm.getMsgBody());
   System.out.println("message is: " + rm.getMsgBody());
   session.write(rm);
}

public void exceptionCaught(IoSession session, Throwable cause) {
   session.close();
}

}
分享到:
评论
1 楼 xulinzhou 2010-09-28  
IoHandlerAdapter

相关推荐

    mina客户端简单代码示例

    在本示例中,我们关注的是"Mina客户端",即如何使用Mina库创建一个简单的客户端应用。 标题中的"mina客户端简单代码示例"意味着我们将探讨如何使用Mina框架编写一个基础的客户端程序,该程序能够连接到服务器并发送...

    mina简单示例

    标题中的"mina简单示例"指的是使用Apache Mina框架构建一个简单的客户端和服务端的程序。在Java开发中,Mina提供了一种高效的方式来处理网络连接和数据传输,特别适合于构建大型、复杂的网络服务。 描述中的"mina...

    apache mina 简单示例

    在"apache mina 简单示例"中,我们通常会涉及以下几个关键概念: 1. **项目设置**:首先,你需要在你的开发环境中集成Apache Mina库。这可以通过在Maven或Gradle的依赖管理中添加Mina的相关依赖来实现。例如,在...

    Mina 1.1.7 示例源码(apache.mina.example)

    在Mina 1.1.7版本中,提供的示例源码是学习和理解Mina框架工作原理及其实现各种网络协议的重要资源。这个压缩包"apache.mina.example"包含了一系列的示例项目,可以帮助开发者快速上手并深入理解Mina。 1. **Mina...

    Mina 实例 包含jar包

    在这个"Mina实例 包含jar包"的压缩包中,我们预计会找到运行Mina示例所需的所有依赖库。 Mina的核心设计思想是提供一个可扩展的框架,允许开发者创建各种类型的网络服务,如TCP/IP协议的应用(如HTTP、FTP)、UDP...

    mina框架的使用

    在"JavaMinaProject"这个压缩包文件中,可能包含了完整的MINA示例项目的源代码,包括项目的结构、配置文件、处理器类、过滤器类以及其他相关的Java类。通过研究这些源代码,读者可以更直观地了解MINA框架的使用方法...

    Mina实现长连接和短连接实例

    在实际项目中,为了运行Mina示例,我们需要以下组件: 1. `.classpath`:这是Eclipse项目类路径的配置文件,包含了项目的依赖库。 2. `.project`:这是Eclipse项目的配置文件,定义了项目类型、构建路径等信息。 3. ...

    mina项目示例

    **mina项目示例** 在Java开发中,网络通信是一个重要的组成部分,尤其是在构建分布式系统和实时应用时。Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络...

    mina传输对象的示例

    在标题和描述中提到的“mina传输对象的示例”指的是如何在Mina框架下处理和传输自定义的数据对象。Mina允许开发者通过事件驱动和异步I/O模型来高效地构建网络服务。 Mina的核心组件包括: 1. **Session**: 表示...

    mina开发示例

    最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 首先,Mina是个什么东西?看下官方网站(http://mina.apache.org/)对它的解释: Apache的Mina(Multipurpose Infrastructure ...

    mina 学习资料(附源码)

    在"压缩包子文件的文件名称列表"中,我们看到只有一个名为"mina demo"的文件,这很可能是一个包含整个MINA示例项目的目录。这个目录可能包括以下部分: 1. **源码**:Java源代码文件,展示了如何使用MINA框架来建立...

    mina编解码示例

    mina编解码示例是基于Apache Mina框架的一个实践项目,主要展示了如何在Mina中进行数据的编码和解码操作。Apache Mina是一个高度可扩展的网络通信框架,广泛应用于开发高性能、高并发的网络应用程序,如TCP/IP和UDP...

    Mina基础示例

    Mina基础示例 Mina,全称是Java Mina框架,是一个开源的网络通信应用框架,主要用于构建高性能、高可用性的网络服务器。Mina旨在简化网络编程,它提供了高级抽象,如事件驱动和异步I/O,使得开发者能够专注于业务...

    使用 Apache MINA 开发高性能网络应用程序

    为了运行 MINA 示例,开发者需要确保以下环境准备: - 安装并配置了 JDK 1.5 或更高版本。 - 下载并包含 MINA 的核心库(mina-core)和其依赖的 SLF4J 日志库。 - 可选的集成开发环境,如 Eclipse 或 NetBeans,以...

    mina test实例一个

    在标题“Mina test实例一个”中,我们看到的是一个实际运用 Mina 框架的示例项目,它已经经过测试,可以供开发者参考和学习。这个实例可能是为了展示如何在实际环境中设置和使用 Mina 来实现长连接。 长连接是网络...

    TCP通讯框架资源包,mina 通讯框架

    通过本资源包中的Mina示例代码,开发者可以学习如何创建服务器端和客户端,如何设置过滤器链,以及如何处理网络事件。同时,还可以了解如何调试和优化Mina应用,以适应不同的性能需求。 总的来说,Mina作为一款成熟...

    mina学习总结

    这些文件可能是Mina示例代码、日志文件或是关于Mina的文档资料。通过阅读和分析这些文件,可以进一步加深对Mina的理解,包括它的API使用、最佳实践和常见问题解决方案。 总之,Apache Mina是一个强大而灵活的框架,...

    Mina 服务端客户端示例程序

    在这个"Mina服务端客户端示例程序"中,我们可能找到了一系列用于展示如何使用Mina框架搭建服务端和客户端的代码示例。下面我们将深入探讨Mina的核心概念以及如何通过这些示例进行学习和实践。 1. **非阻塞I/O**:...

    Apache Mina简单实例

    通过阅读和实践这个简单的Apache Mina示例,你可以了解其基本的工作原理,进一步深入学习,将有助于构建高效、可扩展的网络服务。此外,标签中的“源码”提示我们,可以查看Apache Mina的源代码来学习其内部实现,这...

    MINA 2.0.7 官方示例

    在2.0.7版本中,官方提供了一系列示例来帮助开发者理解和使用MINA框架。 首先,MINA的核心概念是“Session”和“Filter”。Session代表了网络连接,是MINA中处理I/O事件的基础。而Filter则类似于拦截器,用于处理在...

Global site tag (gtag.js) - Google Analytics