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 接口实现
相关推荐
Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)
在学习Apache Mina时,首先要理解其核心组件和设计模式。Mina的核心组件包括Session、Filter、ProtocolCodec等。Session代表了客户端和服务器之间的连接,Filter则提供了数据处理链,ProtocolCodec则用于将应用层的...
1. **Filter Chain**:Mina的核心设计模式之一是过滤器链。每个连接都有一系列过滤器,它们按照顺序处理入站和出站事件。过滤器可以实现特定功能,如数据编码解码、安全验证、性能监控等。 2. **Session**:Session...
在这个"Apache MINA2学习笔记DEMO"中,我们很可能会看到如何使用MINA来创建一个自定义协议的示例。自定义协议通常是为了满足特定应用的需求,例如高效的数据传输、安全性或者特定的编码格式。MINA允许开发者定义自己...
在本学习笔记中,我们将专注于MINA的子项目——FtpServer,它是实现FTP服务器功能的一个模块。 FTP(File Transfer Protocol)是一种广泛使用的互联网协议,用于在不同主机之间传输文件。Apache MINA FtpServer提供...
Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务端应用程序。...通过学习和使用"Mina帮助文档",开发者可以更好地理解和利用这个框架,构建出高效、稳定的网络应用。
1. **Mina架构**:Apache Mina的核心设计基于事件驱动和非阻塞I/O模型,这种模型特别适合处理大量并发连接。它将网络通信层抽象为一组服务,如TCP/IP协议栈,让你专注于业务逻辑而不是底层细节。 2. **IoSession...
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,主要设计用于简化网络应用程序的开发,尤其是基于TCP和UDP协议的应用。它提供了高度可扩展和高性能的非阻塞I/O模型,使得...
apache-mina-2.0.4 架包 源码 学习教程.apache mina是Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序...
1. **中文参考手册**(Apache_Mina_Server_2.0中文参考手册V1.0.pdf):这是一份详尽的MINA框架使用手册,用中文详细介绍了MINA的核心概念、设计模式以及如何创建服务器和客户端。它包含了各种MINA组件的用法,如...
Apache MINA是一个高性能、异步事件驱动的网络应用程序框架,主要设计用于简化开发服务器端的高性能网络应用。这个框架提供了一种抽象层,允许开发者使用相同的API处理多种不同的传输协议,如TCP/IP、UDP/IP以及SSL/...
### Apache MINA 2.0 用户指南:基础知识 #### 基础概念介绍 Apache MINA 2.0 是一款高性能且易于使用的网络...在未来的学习过程中,我们将更深入地探索 MINA 的高级特性,如会话管理、错误处理、安全性和扩展性等。
通过这个项目,开发者可以学习到如何将Mina的异步I/O能力与Spring的容器管理及依赖注入机制结合,构建出健壮且易于维护的网络服务端程序。这包括理解Mina的事件模型、Spring的bean管理和网络编程的最佳实践。同时,...
Apache Mina Server 2.0 是一款高性能、...此外,下载的压缩包文件“minaTest”可能包含示例代码或测试项目,可以作为学习和实践Apache Mina的好材料。通过这些实践,你可以加深对Mina的理解,并将其应用到实际项目中。
Apache Mina是一个开源项目,主要用于构建高...在`MinaTimeServer`和`MinaClient`的例子中,我们可以看到如何使用Mina轻松地建立一个简单的服务器和客户端通信系统,这对于理解和学习Mina的基本用法是非常有帮助的。
很详细的描述了apache mina 框架,对于那些对于英文不是很懂得人,这简直就是福音啊,哈哈
通过阅读和分析`apache-mina-2.0.16`的源码,我们可以深入理解MINA的设计思想,学习如何构建高效的网络服务,并能根据自己的需求定制和扩展MINA的功能。对于想要从事网络编程或系统架构设计的开发者来说,研究MINA...
Apache Mina是一个强大的开源项目,专门设计用于构建网络应用程序。这个框架的核心目标是提供一个抽象层,使得开发者能够专注于业务逻辑,而不是底层网络通信的复杂性。标题中的"Apache-Mina-2.rar"和"mina-mina-...
IoService是Mina中的核心接口之一,它定义了网络服务的基本操作,包括启动、停止服务以及连接管理。它是IoAcceptor和IoConnector的超类型,为它们提供统一的接口。 **2. IoFilter接口** IoFilter接口用于处理数据...