`

Apache Mina的学习应用(四)

阅读更多

 继续上文。在客户端和服务端的调用如下:

客户端;
package cn.com.unutrip.java.opensource.mina.sumup;
import java.net.InetSocketAddress;
import org.apache.mina.core.RuntimeIoException;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
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.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import cn.com.unutrip.java.opensource.mina.sumup.codec.SumUpProtocolCodecFactory;
/**
 * TCP/ID 客户端的应用
 * @author longgangbai
 *
 */
public class Client {
          private static final String HOSTNAME = "localhost";
          private static final int PORT = 8123;
      
          private static final long CONNECT_TIMEOUT = 30*1000L; // 30 seconds
      
          // Set this to false to use object serialization instead of custom codec.
          private static final boolean USE_CUSTOM_CODEC = true;
      
          public static void main(String[] args) throws Throwable {
              // prepare values to sum up
              int[] values = new int[10];
              for (int i = 0; i < args.length; i++) {
                  values[i] = Integer.parseInt(args[i]);
              }
              //创建一个客户端对象
              NioSocketConnector connector = new NioSocketConnector();
      
              // Configure the service.
              //设置连接超时时间
              connector.setConnectTimeoutMillis(CONNECT_TIMEOUT);
              //获取过滤器链工厂
              DefaultIoFilterChainBuilder filterchain=connector.getFilterChain();
              //添加相应的过滤链
              if (USE_CUSTOM_CODEC) {
           //采用自定义的协议编码工厂类过滤器连
           filterchain.addLast("codec",new ProtocolCodecFilter(new SumUpProtocolCodecFactory(false)));
              } else {
           //采用对象序列化编码工厂类过滤器连
           filterchain.addLast("codec",new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
              }
              //添加日志过滤器连
              filterchain.addLast("logger", new LoggingFilter());
              //进行业务处理逻辑
              connector.setHandler(new ClientSessionHandler(values));
      
              IoSession session=null;
              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();
          }
      }
 
服务端使用如下:
 
package cn.com.unutrip.java.opensource.mina.sumup;
import java.net.InetSocketAddress;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import cn.com.unutrip.java.opensource.mina.sumup.codec.SumUpProtocolCodecFactory;
/**
 *TCP /IP 服务端的代码的应用
 * @author longgangbai
 *
 */
public class Server {
    private static final int SERVER_PORT = 8123;
          // Set this to false to use object serialization instead of custom codec.
          private static final boolean USE_CUSTOM_CODEC = true;
      
          public static void main(String[] args) throws Throwable {
              //创建服务端
              NioSocketAcceptor acceptor = new NioSocketAcceptor();
              //获取过滤链的信息
              DefaultIoFilterChainBuilder filterchain=acceptor.getFilterChain();
              // Prepare the service configuration.
              if (USE_CUSTOM_CODEC) {
           filterchain.addLast("codec",new ProtocolCodecFilter(new SumUpProtocolCodecFactory(true)));
              } else {
           filterchain.addLast("codec",new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
              }
              filterchain.addLast("logger", new LoggingFilter());
              //业务处理
              acceptor.setHandler(new ServerSessionHandler());
              //绑定服务端口
              acceptor.bind(new InetSocketAddress(SERVER_PORT));
              System.out.println("Listening on port " + SERVER_PORT);
          }
}

 

希望大家交流。

分享到:
评论

相关推荐

    apache Mina的完整学习资料

    Apache Mina是一个开源框架,主要用于构建高性能、高可用性的网络应用程序。这个压缩包包含了全面的学习资料,适合初学者深入理解Mina的原理和使用方法。其中,中文参考手册的加入使得学习过程更加友好,便于非英语...

    apache mina 学习笔记三(子项目FtpServer)

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,用于构建高性能、高可用性的网络应用程序。MINA 提供了一种简单而强大的API,开发者可以使用它来处理TCP/IP和UDP/IP协议,如...

    apache-mina-2.0.4.rar_apache mina_mina

    对于希望提高网络应用性能或熟悉Java NIO编程的开发者来说,Apache Mina 2.0.4的源码分析是一次宝贵的学习机会。你可以通过阅读源码学习到如何有效地处理高并发场景,如何设计和实现高效的网络协议,以及如何利用...

    Apache mina2学习笔记DEMO

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专为高性能、异步网络应用程序设计。MINA 提供了一套高级的网络通信抽象层,简化了开发过程,特别是对于处理TCP/IP和UDP/IP...

    Apache Mina帮助文档

    Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务端应用程序。...通过学习和使用"Mina帮助文档",开发者可以更好地理解和利用这个框架,构建出高效、稳定的网络应用。

    一个Apache MINA使用案例源代码ApacheMina

    Apache MINA是一个高性能、异步事件驱动的网络应用程序框架,主要设计用于简化开发服务器端的高性能网络应用。这个框架提供了一种抽象层,允许开发者使用相同的API处理多种不同的传输协议,如TCP/IP、UDP/IP以及SSL/...

    Apache Mina 入门Demo

    通过深入学习和实践这个Apache Mina入门Demo,你将掌握如何利用Mina构建网络应用,并了解其核心特性和工作原理,这对于从事Java网络编程或者需要处理大规模并发连接的开发者来说是非常有价值的。

    apache mina实例免费下载

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,主要设计用于简化网络应用程序的开发,尤其是基于TCP和UDP协议的应用。它提供了高度可扩展和高性能的非阻塞I/O模型,使得...

    apache-mina-2.0.4架包及源码各pdf学习教程

    apache-mina-2.0.4 架包 源码 学习教程.apache mina是Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序...

    Apache MINA 2.0 用户指南( 缺第一章节)

    Apache MINA 2.0 是一款高性能且易于使用的网络应用程序框架,它简化了开发人员在网络编程方面的负担,允许开发者专注于应用程序的核心功能,而不是底层的网络细节。MINA 2.0 支持多种网络协议,包括 TCP 和 UDP,...

    Apache MINA框架相关资料

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发高质量的网络服务。这个框架适用于多种协议,如TCP/IP和UDP/IP,以及NIO(非...

    Apache Mina Server 2.0 抢鲜体验

    Apache Mina Server 2.0 是一款高性能、...此外,下载的压缩包文件“minaTest”可能包含示例代码或测试项目,可以作为学习和实践Apache Mina的好材料。通过这些实践,你可以加深对Mina的理解,并将其应用到实际项目中。

    apache mina-spring 服务端程序

    Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高并发的网络应用程序,如服务器端应用。它提供了一种简单而强大的编程模型,使得开发者可以专注于业务逻辑,而不是底层的网络通信细节。Spring...

    Apache-Mina-2.rar_apache mina_java mina_mina_mina-core-1.1.3

    Apache Mina是一个强大的开源项目,专门设计用于构建网络应用程序。这个框架的核心目标是...通过深入学习和实践,开发者可以创建出满足各种需求的网络服务,无论是在企业级应用还是小型项目中,Mina都能发挥重要作用。

    apache-mina例子

    Apache Mina是一个开源项目,主要用于构建高性能、高可用性的网络应用程序。这个例子是关于如何使用Apache Mina实现一个简单的服务端和客户端通信的示例。在这个案例中,`MinaTimeServer`是服务端程序,它负责监听...

    apache-mina源码

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专为开发高性能和高可用性的网络应用程序而设计。MINA提供了异步的、事件驱动的网络应用编程接口(API),适用于TCP和UDP协议...

    Apache Mina 2 完全自学手册

    Apache Mina 2是Apache项目下的一款高性能、高可扩展性的网络应用框架,它简化了Java NIO编程,使得开发者能够更加轻松地构建复杂的网络应用。Mina通过提供一个抽象的、事件驱动的异步API,支持多种传输协议,包括但...

    Apache mina源代码框架解析

    总的来说,Apache Mina通过其过滤器架构和处理器模型,为开发网络应用程序提供了强大的抽象。通过对`MinaTimeServer`的源代码分析,我们可以看到如何配置服务器,设置过滤器,处理网络事件,并与客户端进行有效通信...

    Apache Mina简单实例

    Apache Mina是一个开源的Java框架,它简化了网络应用程序的开发,特别是对于TCP/IP和UDP协议的应用。在本文中,我们将通过一个简单的实例来探讨如何使用Apache Mina进行网络通信。 首先,Apache Mina的核心是它的...

Global site tag (gtag.js) - Google Analytics