- 浏览: 50372 次
- 性别:
文章分类
- 全部博客 (103)
- 一致性哈希算法 (1)
- 云计算 (2)
- Cassandra学习 (2)
- Java网络通信与笔记 (14)
- ZooKeeper学习 (1)
- HBase学习 (1)
- Sqoop学习 (1)
- Java网页开发之 (2)
- Java网络通信框架 (5)
- (memcached)分布式内存对象缓存系统 (1)
- Redis学习 (5)
- Shell学习 (14)
- Linux学习 (10)
- MySQL优化 (17)
- C++ (7)
- HTML5 (5)
- Android学习 (5)
- 网络 (2)
- Node.js (1)
- D3.js (1)
- R语言学习 (3)
- Spark (1)
- CAN协议 (2)
- 解决方案 (0)
最新评论
MINA框架的常用类
类NioSocketAcceptor用于创建服务端监听;
类NioSocketConnector用于创建客户端连接;
类IoSession用来保存会话属性和发送消息;
类IoHandlerAdapter用于定义业务逻辑,常用的方法有:
方法 定义
sessionCreated() 当会话创建时被触发
sessionOpened() 当会话开始时被触发
sessionClosed() 当会话关闭时被触发
sessionIdle() 当会话空闲时被触发
exceptionCaught() 当接口中其他方法抛出异常未被捕获时触发此方法
messageRecieved() 当接收到消息后被触发
messageSent() 当发送消息后被触发
服务端应用开发示例
所需jar包slf4j-api.jar、slf4j-jdk14.jar、MINA-core-2.0.0-M6.jar。
1)、首先定义一个业务逻辑处理器TimeServerHandler,继承自IoHandlerAdapter,实现的功能有:当客户端创建会话时会显示客户端设备的IP和端口;当客户端输入quit时结束会话;客户端输入其它内容时则向客户端发送当前时间。代码如下:
TimeServerHandler :
MinaTimeServer:
2)、客户端代码:
TimeClientHandler:
MinaTimeClient:
1)、建立两个工程代码组织如下:
传输对象:
UserInfo:
客户端代码:
ClientHandler:
MainClient:
服务器端:
ServerHandler:
MainServer:
类NioSocketAcceptor用于创建服务端监听;
类NioSocketConnector用于创建客户端连接;
类IoSession用来保存会话属性和发送消息;
类IoHandlerAdapter用于定义业务逻辑,常用的方法有:
方法 定义
sessionCreated() 当会话创建时被触发
sessionOpened() 当会话开始时被触发
sessionClosed() 当会话关闭时被触发
sessionIdle() 当会话空闲时被触发
exceptionCaught() 当接口中其他方法抛出异常未被捕获时触发此方法
messageRecieved() 当接收到消息后被触发
messageSent() 当发送消息后被触发
服务端应用开发示例
所需jar包slf4j-api.jar、slf4j-jdk14.jar、MINA-core-2.0.0-M6.jar。
1)、首先定义一个业务逻辑处理器TimeServerHandler,继承自IoHandlerAdapter,实现的功能有:当客户端创建会话时会显示客户端设备的IP和端口;当客户端输入quit时结束会话;客户端输入其它内容时则向客户端发送当前时间。代码如下:
TimeServerHandler :
import java.util.Date; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; public class TimeServerHandler extends IoHandlerAdapter { public void sessionCreated(IoSession session) { // 显示客户端的ip和端口 System.out.println(session.getRemoteAddress().toString()+"1111111111111"); } @Override public void messageReceived(IoSession session, Object message) throws Exception { String str = message.toString(); System.out.println("str:"+str); if (str.trim().equalsIgnoreCase("quit")) { session.close(); // 结束会话return; } Date date = new Date(); session.write(date.toString()); // 返回当前时间的字符串 System.out.println("Message written..."+"2222222222"); } }
MinaTimeServer:
import java.io.IOException; import java.net.InetSocketAddress; import java.nio.charset.Charset; 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.filter.logging.LoggingFilter; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; public class MinaTimeServer { private static final int PORT = 9123;// 定义监听端口 /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub IoAcceptor acceptor = new NioSocketAcceptor(); acceptor.getFilterChain().addLast("logger", new LoggingFilter()); acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8")))); // 指定编码过滤器 acceptor.setHandler(new TimeServerHandler()); // 指定业务逻辑处理器 acceptor.setDefaultLocalAddress(new InetSocketAddress(PORT)); // 设置端口号 acceptor.bind();// 启动监听} } }
2)、客户端代码:
TimeClientHandler:
import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; public class TimeClientHandler extends IoHandlerAdapter{ public TimeClientHandler() {} @Override public void messageReceived(IoSession session, Object message) throws Exception { System.out.println(message);// 显示接收到的消息 } }
MinaTimeClient:
import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.core.future.ConnectFuture; 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 MinaTimeClient { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub // 创建客户端连接器. NioSocketConnector connector = new NioSocketConnector(); connector.getFilterChain().addLast( "logger", new LoggingFilter() ); connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" )))); //设置编码过滤器 connector.setConnectTimeout(30); connector.setHandler(new TimeClientHandler());//设置事件处理器 ConnectFuture cf = connector.connect(new InetSocketAddress("127.0.0.1", 9123));//建立连接 cf.awaitUninterruptibly();//等待连接创建完成 cf.getSession().write("hello");//发送消息 cf.getSession().write("quit");//发送消息 cf.getSession().getCloseFuture().awaitUninterruptibly();//等待连接断开 connector.dispose(); } }
1)、建立两个工程代码组织如下:
传输对象:
UserInfo:
package Mina.Object; public class UserInfo implements java.io.Serializable{ private String name; private String QQNum; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getQQNum() { return QQNum; } public void setQQNum(String qQNum) { QQNum = qQNum; } }
客户端代码:
ClientHandler:
package Mina.client; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; import Mina.Object.UserInfo; public class ClientHandler extends IoHandlerAdapter { private static ClientHandler samplMinaClientHandler = null; public static ClientHandler getInstances() { if (null == samplMinaClientHandler) { samplMinaClientHandler = new ClientHandler(); } return samplMinaClientHandler; } private ClientHandler() { } public void sessionOpened(IoSession session) throws Exception { session.write("客户端与服务器的会话打开了……"); UserInfo text=new UserInfo(); text.setName("梅竹寒香"); text.setQQNum("972341215"); session.write(text); } public void sessionClosed(IoSession session) { } public void messageReceived(IoSession session, Object message) throws Exception { } public void messageSent(IoSession arg0, Object arg1) throws Exception { System.out.println("客户端已经向服务器发送了:"+(String)arg1); } }
MainClient:
package Mina.client; import java.net.InetSocketAddress; import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory; import org.apache.mina.transport.socket.nio.NioSocketConnector; public class MainClient { private static MainClient mainClient = null; NioSocketConnector connector = new NioSocketConnector(); DefaultIoFilterChainBuilder chain = connector.getFilterChain(); public static MainClient getInstances() { if (null == mainClient) { mainClient = new MainClient(); } return mainClient; } private MainClient() { chain.addLast("myChin", new ProtocolCodecFilter( new ObjectSerializationCodecFactory())); connector.setHandler(ClientHandler.getInstances()); connector.setConnectTimeout(30); ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 8888)); } public static void main(String args[]) { MainClient.getInstances(); } }
服务器端:
ServerHandler:
package Mina.server; import org.apache.mina.core.filterchain.IoFilterAdapter; import org.apache.mina.core.service.IoHandler; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoSession; import Mina.Object.UserInfo; public class ServerHandler extends IoFilterAdapter implements IoHandler { private static ServerHandler samplMinaServerHandler = null; public static ServerHandler getInstances() { if (null == samplMinaServerHandler) { samplMinaServerHandler = new ServerHandler(); } return samplMinaServerHandler; } private ServerHandler() { } // 当连接后打开时触发此方法,一般此方法与 sessionCreated 会被同时触发 public void sessionOpened(IoSession session) throws Exception { } public void sessionClosed(IoSession session) { } public void messageReceived(IoSession session, Object message) throws Exception { if (message instanceof UserInfo) { UserInfo text = (UserInfo) message; System.out.println("服务器接收到从客户端的姓名:"+text.getName()); System.out.println("服务器接收到从客户端的QQ:"+text.getQQNum()); } } public void exceptionCaught(IoSession arg0, Throwable arg1) throws Exception { } // 当消息传送到客户端后触发 public void messageSent(IoSession arg0, Object arg1) throws Exception { } // 当一个新客户端连接后触发此方法. public void sessionCreated(IoSession arg0) throws Exception { } // 当连接空闲时触发此方法. public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception { } }
MainServer:
package Mina.server; import java.io.IOException; 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.transport.socket.SocketAcceptor; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; public class MainServer { private static MainServer mainServer = null; private SocketAcceptor acceptor = new NioSocketAcceptor(); private DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); private int bindPort = 8888; public static MainServer getInstances() { if (null == mainServer) { mainServer = new MainServer(); } return mainServer; } private MainServer() { chain.addLast("myChin", new ProtocolCodecFilter( new ObjectSerializationCodecFactory())); acceptor.setHandler(ServerHandler.getInstances()); try { acceptor.bind(new InetSocketAddress(bindPort)); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { MainServer.getInstances(); } }
相关推荐
标题中的"mina客户端简单代码示例"意味着我们将探讨如何使用Mina框架编写一个基础的客户端程序,该程序能够连接到服务器并发送数据。描述指出,运行这个客户端程序(minaTestClient)会展示一个窗口,用户可以通过...
mina编解码示例是基于Apache Mina框架的一个实践项目,主要展示了如何在Mina中进行数据的编码和解码操作。Apache Mina是一个高度可扩展的网络通信框架,广泛应用于开发高性能、高并发的网络应用程序,如TCP/IP和UDP...
提到这个示例可以在MyEclipse或Eclipse中直接运行,意味着开发者可以将源码导入到这些IDE中,利用它们的调试工具和代码编辑功能进行学习和开发。 5. **学习与交流** 这个示例集合是为了学习和交流而准备的,...
本示例将介绍如何使用Mina实现一个简单的服务器端代码,并运行MinaTimeServer。 在Java中,Mina提供了一种事件驱动、异步编程模型,使得开发者可以更高效地处理网络通信。其核心组件包括Acceptor(监听器)、...
在这个"Mina服务端客户端示例程序"中,我们可能找到了一系列用于展示如何使用Mina框架搭建服务端和客户端的代码示例。下面我们将深入探讨Mina的核心概念以及如何通过这些示例进行学习和实践。 1. **非阻塞I/O**:...
9. **测试与调试**:在"TestMina"这个文件中,可能包含了服务端和客户端的测试代码,用于验证Mina应用的功能。通过断言和日志输出,你可以检查数据是否正确传输,连接是否成功建立等。 学习Apache Mina时,理解以上...
在压缩包文件"apache-mina"中,可能包含了MINA框架的源码、示例代码、配置文件以及其他相关资源,这些都是学习和研究MINA的好材料。开发者可以通过阅读这些代码,进一步了解MINA在实际应用中的具体实现方式。
在标题和描述中提到的“mina传输对象的示例”指的是如何在Mina框架下处理和传输自定义的数据对象。Mina允许开发者通过事件驱动和异步I/O模型来高效地构建网络服务。 Mina的核心组件包括: 1. **Session**: 表示...
在2.0.7版本中,官方提供了一系列示例来帮助开发者理解和使用MINA框架。 首先,MINA的核心概念是“Session”和“Filter”。Session代表了网络连接,是MINA中处理I/O事件的基础。而Filter则类似于拦截器,用于处理在...
标题中的"mina简单示例"指的是使用Apache Mina框架构建一个简单的客户端和服务端的程序。在Java开发中,Mina提供了一种高效的方式来处理网络连接和数据传输,特别适合于构建大型、复杂的网络服务。 描述中的"mina...
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 首先,Mina是个什么东西?看下官方网站(http://mina.apache.org/)对它的解释: Apache的Mina(Multipurpose Infrastructure ...
- **测试代码**:MINA的测试代码通常包含了大量示例,是学习MINA如何工作的良好资源。 通过阅读和分析MINA的源代码,你可以更深入地了解其内部工作原理,学习如何利用MINA构建高性能的网络服务。这包括但不限于理解...
**Mina2.x开发示例** Apache Mina是一个开源项目,提供了一个高度可扩展的网络通信框架,适用于各种协议,如TCP、UDP和HTTP。它主要用于简化开发高性能、高并发的网络应用程序,如服务器和客户端。在Mina2.x版本中...
《Mina通信框架应用详解》 Mina通信框架,全称为Apache MINA,是一个高度可扩展的、基于Java的网络应用程序开发框架。MINA的名字来源于多语言(Multi-purpose Infrastructure for Network Applications),它提供了...
在这个文档中,我们将简要分析Mina 2.0框架的源代码,并通过一个简单的时钟服务器示例来了解其工作原理。 首先,我们来看`MinaTimeServer`类。这个类是Mina服务器的主入口点,它创建了一个`NioSocketAcceptor`实例...
**Mina客户端示例** Apache Mina是一个高度可扩展的网络通信框架,它为Java应用程序提供了简单的API来处理TCP/IP、UDP和其他协议的网络通信。在这个"Mina客户端示例"中,我们主要关注如何利用Mina框架构建一个...
在这个简单示例中,我们将深入探讨 Mina Socket 的核心概念和源代码分析。 1. **Mina 架构** Mina 使用事件驱动和异步处理模型,使得它能够高效地处理大量并发连接。它的架构由三个主要组件组成:Filter、Session ...
Mina基础示例 Mina,全称是Java Mina框架,是一个开源的网络通信应用框架,主要用于构建高性能、高可用性的网络服务器。Mina旨在简化网络编程,它提供了高级抽象,如事件驱动和异步I/O,使得开发者能够专注于业务...
MINA提供了一套完整的API文档和示例代码,帮助开发者快速理解和使用框架。其清晰的API设计使得学习曲线相对平缓,降低了开发网络应用的难度。 在“apache-mina-2.0.3”这个压缩包中,包含了MINA框架的源代码,...
MINA(Java Multicast Network Application Programming Interface)是一个高性能、异步事件驱动的网络应用程序框架,主要...在实际的Client文件中,应该包含了实现上述功能的具体代码示例,可以作为学习和参考的基础。