`
Chrisp
  • 浏览: 4416 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Apache MINA学习之路(1)

阅读更多


 1,Apache Mina 也称为:
     ●
NIO 框架

     ● 客户端/服务端框架(典型的 C/S 架构)
     ● 网络套接字(networking socket)类库

 

2,所要加载的包

    
 

3,Mina 的执行流程
       

 

4,服务端程序

import java.io.IOException;
import java.net.InetSocketAddress;

import org.apache.log4j.Logger;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class Demo1Server {
	private static Logger logger =Logger.getLogger(Demo1Server.class);
	private static int PORT = 8888;
	
	public static void main(String[] args) {
		IoAcceptor acceptor  = null;
		try {
		//创建一个非阻塞的server端的Socket
		acceptor = new NioSocketAcceptor();
		//创建接收数据的过滤器
		DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
		//设置过滤器(使用Mina提供的文本换行符编解码器)
		chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));
		//new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"),LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue()));
		// 绑定逻辑处理器
		acceptor.setHandler(new Demo1ServerHandler());
		// 绑定端口
		acceptor.bind(new InetSocketAddress(PORT));
		logger.info("服务已启动... 端口号为:" + PORT);
		} catch (IOException e) {
			logger.error("服务端启动异常....", e);
			e.printStackTrace();
		}
		
	}
}

 

    逻辑处理器

import java.util.Date;

import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

public class Demo1ServerHandler extends IoHandlerAdapter {
	public static Logger logger = Logger.getLogger(Demo1ServerHandler.class);

	public void sessionCreated(IoSession session) throws Exception {
		logger.info("服务端与客户端创建连接...");
	}

	public void sessionOpened(IoSession session) throws Exception {
		logger.info("服务端与"+session.getRemoteAddress()+"客户端连接打开...");
	}

	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {
		String msg = message.toString();
		logger.info("服务端接收到的数据为:" + msg);
		if ("bye".equals(msg)) { // 服务端断开连接的条件
			session.close(true);
		}
		Date date = new Date();
		session.write(date);
	}

	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
                //session.close(); //发送成功后主动断开与客户端的连接(短连接时使用)
		logger.info("服务端发送信息成功...");
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception {
	}

	public void sessionIdle(IoSession session, IdleStatus status)
			throws Exception {
		logger.info("服务端进入空闲状态...");
	}

	@Override
	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
		logger.error("服务端发送异常...", cause);
	}
}

   测试:cmd -> telnet localhost 8888

 

 5,客户端程序

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

import org.apache.log4j.Logger;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFactory;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;

public class MinaClient01 {
	private static Logger logger = Logger.getLogger(MinaClient01.class);
	private static String HOST = "127.0.0.1";
	private static int PORT = 8888;

	public static void main(String[] args) {
		// 创建一个非阻塞的客户端程序
		IoConnector connector = new NioSocketConnector();
		// 添加过滤器
		connector.getFilterChain().addLast("myChin",new ProtocolCodecFilter(new TextLineCodecFactory()));
		// 添加业务逻辑处理器类
		connector.setHandler(new Demo1ClientHandler());
		IoSession session = null;
		try {
			// 创建连接
			ConnectFuture future = connector.connect(new InetSocketAddress(HOST, PORT));
			// 等待连接创建完成
			future.awaitUninterruptibly();
			// 获得session
			session = future.getSession();
			// 发送消息
			session.write("接收成功");
		} catch (Exception e) {
			logger.error("客户端链接异常...", e);
		}
		session.getCloseFuture().awaitUninterruptibly();// 等待连接断开
		connector.dispose();
	}
}

   逻辑处理器

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

public class Demo1ClientHandler extends IoHandlerAdapter {
	private static Logger logger = Logger.getLogger(Demo1ClientHandler.class);

	//当一个客端端连结进入时
	@Override
	public void sessionOpened(IoSession session) throws Exception {
		logger.info("客户端"+session.getRemoteAddress()+"连接成功");
		session.write("我来啦........");
	}
	//当一个客户端关闭时
	@Override
	public void sessionClosed(IoSession session) {
		logger.info("一个客户端断开连接");
	}
	//当客户端发送的消息到达时
	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {
		String msg = message.toString();
		logger.info("客户端接收到的信息为:" + msg);
	}

	@Override
	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
		logger.error("客户端发生异常...", cause);
	}
}

 6,总结:

    服务端程序或客户端程序创建过程:

    创建连接--->添加消息过滤器(编码解码等) --->添加业务处理

 

    Mina 的三个核心接口:IoService 接口,IoFilter 接口和 IoHandler 接口:
        ●  第一步. 创建服务对象(客户端或服务端) ---IoService 接口实现
        ● 第二步. 数据过滤(编码解码等) ---IOFilter 接口实现
        ●  第三步. 业务处理 ---IoHandler 接口实现

 

 

  • 大小: 14.4 KB
  • 大小: 51.2 KB
分享到:
评论

相关推荐

    Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)

    Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)

    apache Mina的完整学习资料

    在学习Apache Mina时,首先要理解其核心组件和设计模式。Mina的核心组件包括Session、Filter、ProtocolCodec等。Session代表了客户端和服务器之间的连接,Filter则提供了数据处理链,ProtocolCodec则用于将应用层的...

    apache-mina-2.0.4.rar_apache mina_mina

    1. **Filter Chain**:Mina的核心设计模式之一是过滤器链。每个连接都有一系列过滤器,它们按照顺序处理入站和出站事件。过滤器可以实现特定功能,如数据编码解码、安全验证、性能监控等。 2. **Session**:Session...

    Apache mina2学习笔记DEMO

    在这个"Apache MINA2学习笔记DEMO"中,我们很可能会看到如何使用MINA来创建一个自定义协议的示例。自定义协议通常是为了满足特定应用的需求,例如高效的数据传输、安全性或者特定的编码格式。MINA允许开发者定义自己...

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

    在本学习笔记中,我们将专注于MINA的子项目——FtpServer,它是实现FTP服务器功能的一个模块。 FTP(File Transfer Protocol)是一种广泛使用的互联网协议,用于在不同主机之间传输文件。Apache MINA FtpServer提供...

    Apache Mina帮助文档

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

    Apache Mina 入门Demo

    1. **Mina架构**:Apache Mina的核心设计基于事件驱动和非阻塞I/O模型,这种模型特别适合处理大量并发连接。它将网络通信层抽象为一组服务,如TCP/IP协议栈,让你专注于业务逻辑而不是底层细节。 2. **IoSession...

    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框架相关资料

    1. **中文参考手册**(Apache_Mina_Server_2.0中文参考手册V1.0.pdf):这是一份详尽的MINA框架使用手册,用中文详细介绍了MINA的核心概念、设计模式以及如何创建服务器和客户端。它包含了各种MINA组件的用法,如...

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

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

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

    ### Apache MINA 2.0 用户指南:基础知识 #### 基础概念介绍 Apache MINA 2.0 是一款高性能且易于使用的网络...在未来的学习过程中,我们将更深入地探索 MINA 的高级特性,如会话管理、错误处理、安全性和扩展性等。

    apache mina-spring 服务端程序

    通过这个项目,开发者可以学习到如何将Mina的异步I/O能力与Spring的容器管理及依赖注入机制结合,构建出健壮且易于维护的网络服务端程序。这包括理解Mina的事件模型、Spring的bean管理和网络编程的最佳实践。同时,...

    Apache Mina Server 2.0 抢鲜体验

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

    apache-mina例子

    Apache Mina是一个开源项目,主要用于构建高...在`MinaTimeServer`和`MinaClient`的例子中,我们可以看到如何使用Mina轻松地建立一个简单的服务器和客户端通信系统,这对于理解和学习Mina的基本用法是非常有帮助的。

    apache mina 中文版 学习资料(很详细的哟)

    很详细的描述了apache mina 框架,对于那些对于英文不是很懂得人,这简直就是福音啊,哈哈

    apache-mina源码

    通过阅读和分析`apache-mina-2.0.16`的源码,我们可以深入理解MINA的设计思想,学习如何构建高效的网络服务,并能根据自己的需求定制和扩展MINA的功能。对于想要从事网络编程或系统架构设计的开发者来说,研究MINA...

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

    Apache Mina是一个强大的开源项目,专门设计用于构建网络应用程序。这个框架的核心目标是提供一个抽象层,使得开发者能够专注于业务逻辑,而不是底层网络通信的复杂性。标题中的"Apache-Mina-2.rar"和"mina-mina-...

    Apache Mina 2 完全自学手册

    IoService是Mina中的核心接口之一,它定义了网络服务的基本操作,包括启动、停止服务以及连接管理。它是IoAcceptor和IoConnector的超类型,为它们提供统一的接口。 **2. IoFilter接口** IoFilter接口用于处理数据...

Global site tag (gtag.js) - Google Analytics