`

mina-example中的小例子(字符串反转)

阅读更多
1.首先请看服务端代码:
package org.apache.mina.example.reverser;

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

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;

/**
 * (<b>Entry point</b>) Reverser server which reverses all text lines from
 * clients.
 *
 * @author <a href="http://mina.apache.org">Apache MINA Project</a>
 */
public class Main {
    private static final int PORT = 8080;

    public static void main(String[] args) throws Exception {
        NioSocketAcceptor acceptor = new NioSocketAcceptor();

        // Prepare the configuration
        acceptor.getFilterChain().addLast("logger", new LoggingFilter());
        acceptor.getFilterChain().addLast(
                "codec",
                new ProtocolCodecFilter(new TextLineCodecFactory(Charset
                        .forName("UTF-8"))));

        // Bind
        acceptor.setHandler(new ReverseProtocolHandler());
        acceptor.bind(new InetSocketAddress(PORT));

        System.out.println("Listening on port " + PORT);
    }
}


2.在看服务器端消息处理器

package org.apache.mina.example.reverser;

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

/**
 * {@link IoHandler} implementation of reverser server protocol.
 *
 * @author <a href="http://mina.apache.org">Apache MINA Project</a>
 */
public class ReverseProtocolHandler extends IoHandlerAdapter {
    @Override
    public void exceptionCaught(IoSession session, Throwable cause) {
        // Close connection when unexpected exception is caught.
        session.close(true);
    }

    @Override
    public void messageReceived(IoSession session, Object message) {
        // Reverse reveiced string
        String str = message.toString();
        System.err.println("收到客户端发来的消息::"+str);
        StringBuilder buf = new StringBuilder(str.length());
        for (int i = str.length() - 1; i >= 0; i--) {
            buf.append(str.charAt(i));
        }

        // and write it back.
        session.write(buf.toString());
    }
}

3.接着是自己模仿写的客户端代码:
package org.apache.mina.example.reverser;

import java.net.InetSocketAddress;

import org.apache.mina.core.RuntimeIoException;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.session.IoSession;
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.NioSocketConnector;

public class MyClient
{
   private static final String HOSTNAME = "localhost";

    private static final int PORT = 8080;

    private static final long CONNECT_TIMEOUT = 30*1000L; // 30 seconds
    
   
	public static void main(String[] args) throws Exception
	{
		// 创建 TCP/IP connector.
		NioSocketConnector connector = new NioSocketConnector();
		//设置日志过滤器
		 connector.getFilterChain().addLast("logger", new LoggingFilter());
		//获得过滤器,设置读取数据的方式一行一行的读.
		connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory()));
		connector.setHandler(new ReverseClientHandler());
		//set connect timeout
		connector.setConnectTimeoutMillis(CONNECT_TIMEOUT);
		 IoSession session;
	       for (;;) {
	            try {
	            	//连接到服务器
	                ConnectFuture future = connector.connect(new InetSocketAddress(
	                        HOSTNAME, PORT));
	                future.awaitUninterruptibly();
	                session = future.getSession();
	                break;
	            } catch (RuntimeIoException e) {
	                System.err.println("Failed to connect.");
	                e.printStackTrace();
					Thread.sleep(5000);
					
	            }
	        }

	        // wait until the summation is done
	        session.getCloseFuture().awaitUninterruptibly();
	        
	        connector.dispose();
		
		
	}
}


4.客户端的消息处理器
package org.apache.mina.example.reverser;

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

public class ReverseClientHandler extends IoHandlerAdapter
{

	@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
	{
		String msg = (String)message;
		System.out.println("Server sent message :"+msg);
		session.write(msg);
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception
	{
		session.close(true);
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception
	{
		// TODO Auto-generated method stub
		super.sessionCreated(session);
	}

	@Override
	public void sessionOpened(IoSession session) throws Exception
	{
		session.write("我是好人");
	}
	
}


然后:先启动服务器端Main,然后启动MyClient,跑起来吧。
分享到:
评论

相关推荐

    mina-core-2.0.0-M1.jar/mina-example-1.0.5.jar

    mina-core-2.0.0-M1.jar/mina-example-1.0.5.jar/slf4j-jdk14-1.6.1.jar/slf4j-log4j12-1.6.1.jar mina 所用jar

    mina2.0 含11个jar包

    mina-example-2.0.0-M6.jar mina-filter-codec-netty-2.0.0-M6.jar mina-filter-compression-2.0.0-M6.jar mina-integration-beans-2.0.0-M6.jar mina-integration-jmx-2.0.0-M6.jar mina-integration-ognl-2.0.0-M6...

    mina-example-2.0.4.jar

    MINA开发核心jar包,mina-example-2.0.4.jar 发出来供大家使用!

    mina-core-2.0.0-RC1.jar,mina-filter-compression-2.0.0-RC1.jar

    在这个场景中,我们关注的是MINA的核心组件以及两个特定的过滤器和传输组件:`mina-core-2.0.0-RC1.jar`、`mina-filter-compression-2.0.0-RC1.jar`和`mina-transport-apr-2.0.0-RC1.jar`。 **MINA Core (mina-core...

    mina-filter-compression-2.0.7.jar

    mina-filter-compression-2.0.7.jar,mina 过滤器jar包,核心包之一

    Apache MINA开发相关jar包

    apache-mina-2.0.7-bin.zip,apache-mina-2.0.7-src.zip,log4j-1.2.17.zip,slf4j-api-1.6.6.jar,slf4j-api-1.6.6-sources.jar,slf4j-log4j12-1.6.6.jar,mina-example-2.0.7.jar,mina-example-2.0.7-sources....

    apache-mina-2.0.16-jar包-代码.zip

    标题中的"apache-mina-2.0.16-jar包-代码.zip"表明这是一个包含Apache Mina 2.0.16版本源代码的JAR文件压缩包。这个压缩包通常用于开发者进行源码级别的学习、调试或定制工作。通过解压这个文件,你可以获得Mina库的...

    apache-mina-2.0.16

    描述中的"apache-mina-2.0.16.zip"是指这个版本的源代码或二进制库被打包成ZIP文件供用户下载。ZIP文件是常见的压缩格式,用于减少文件的存储空间和便于传输。 标签"2.0.16"强调了这个特定的版本号。在软件开发中,...

    mina2.0全部jar包

    mina-example-2.0.7.jar包含了MINA提供的示例代码,这些例子覆盖了各种常见的网络应用场景,包括HTTP服务器、聊天应用等,可以帮助开发者快速理解和学习如何使用MINA进行网络编程。 mina-statemachine-2.0.7.jar...

    mina-core-2.0.0-RC1

    在本文中,我们将深入探讨mina-core-2.0.0-RC1这个版本的主要特点和关键功能。 mina-core-2.0.0-RC1是MINA框架的一个重要里程碑,代表了其发展的一个关键阶段。此版本的发布标志着MINA向2.0正式版迈进了一大步,...

    mina-core-2.0.0-M1.jar和slf4j

    在实际应用中,将mina-core-2.0.0-M1.jar与SLF4J结合,可以实现高效且可维护的网络通信服务,并通过SLF4J进行细致的日志记录,便于问题排查和系统监控。在开发过程中,需要确保mina-core库与合适的SLF4J绑定库(如...

    mina-integration-beans-2.0.0-M4.jar

    mina-integration-beans-2.0.0-M4.jar mina-integration-beans-2.0.0-M4.jar

    mina-core-2.0.1.jar,apache-mina-2.0.1

    在本案例中,我们关注的是 "mina-core-2.0.1.jar",这是 Apache MINA 的核心库,包含了框架的基本组件和功能。 **MINA 核心组件:** 1. **IoSession**:MINA 中的核心概念,它代表了服务端与客户端之间的一个连接。...

    mina-integration-ognl-2.0.0-M4.jar

    mina-integration-ognl-2.0.0-M4.jar mina-integration-ognl-2.0.0-M4.jar

    Apache Mina核心jar包:mina-core-2.0.7

    Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利...当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供)。

    MINA-2.0.0-M4 英文版

    在MINA-2.0.0-M4版本中,可能会涉及以下重要知识点: 1. 新增的API和类:了解新增的类和接口,如何在项目中利用它们来提升效率或扩展功能。 2. 性能优化:学习这一版本中的性能改进,如何在代码中应用以提高应用的...

    mina-core-2.0及其他相关jar

    mina-core-2.0及其他相关jar,mina-core-2.0及其他相关jarmina-core-2.0及其他相关jarmina-core-2.0及其他相关jarmina-core-2.0及其他相关jar

    mina-http-2.0.7.jar.zip_mina_mina 获取POST_mina-http_mina-http-2.0

    《mina-http-2.0.7.jar:Java中的MINA框架与HTTP支持详解》 MINA(Multipurpose Infrastructure for Network Applications)是一个强大的网络应用程序框架,它由Apache软件基金会开发,主要用于构建高性能、高效率...

    apache-mina-2.0.7-bin.tar

    标题中的"apache-mina-2.0.7-bin.tar"指的是Apache Mina 2.0.7版本的二进制发布包,该包包含了编译好的库文件和运行时所需的资源,用户可以直接使用而无需自行编译源代码。 描述中提及的"apache-mina-2.0.7-src.tar...

    mina-transport-apr-2.0.2.jar

    mina-transport-apr-2.0.2.jar

Global site tag (gtag.js) - Google Analytics