- 浏览: 764506 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (208)
- Java (77)
- JavaScript (16)
- UML (1)
- Spring (24)
- Hibernate (11)
- J2EE部署 (18)
- 操作系统 (13)
- struts (11)
- jsp (3)
- J2EE (34)
- 数据库 (22)
- tomcat (4)
- apache (2)
- MyEclipse (13)
- Linux (14)
- Ext (6)
- Weblogic (2)
- 数据库 Oracle 空表导出 (1)
- Oracle (3)
- 编码 乱码 (1)
- 多线程 (5)
- jQuery (2)
- Apache Mina (1)
- ibatis (6)
- abator (1)
- svn (1)
- jvm (1)
- ERwin (2)
- mysql (2)
- ant (1)
- memcache (1)
- dubbo (1)
- PowerDesigner (1)
最新评论
-
di1984HIT:
Shallow heap & Retained heap -
tinguo002:
非常感谢 , 太棒了。
Spring注解方式,异常 'sessionFactory' or 'hibernateTemplate' is required的解决方法 -
白天看黑夜:
Apache Mina Server 2.0 中文参考手册(带 ...
Apache Mina – 简单的客户端/服务端应用示例 -
wumingxingzhe:
好文
Shallow heap & Retained heap -
di1984HIT:
学习了!!
工作流(Workflow)和BPM的不同
Apache Mina – 简单的客户端/服务端应用示例
转自http://javasight.net/2011/05/simple-client-server-application-using-mina/
Introduction介绍
Mina的缩写意思是”Multipurpose Infrastructure for Network Applications(多用途网络应用基础设施)”,它用于开发高度可扩展和高性能网络应用的网络应用框架。在本文中,让我们看看如何使用Apache Mina2.0.x来创建一个简单的客户端服务器端(c/s)应用。
所需的JAR包
Apache Mina 2.0.x jars
slf4j-api.jar
slf4k-jdk14.jar
服务端部分
对服务器端部分,我们需要使用MinaServer和MinaServerHandler两个类。MinaServer类包含了主方法和名为IoAcceptor的借口来接受来自客户端的进入连接,IoAcceptor用于向handler触发相应的事件。 我们使用了两个过滤器,第一个是LoggingFilter,用于记录所有的事件,第二个是ProtocolCOdecFilter,用于转换进入的ByteBuffer到报文的POJO。MinaServer的类代码如下:
MinaServer.java
接着我们创建一个名为MinaServerHandler自定义handler,它包含了4个方法。第一个方法是sessionOpened在session打开后被调用, 它用于设置session的空闲时间。第二个方法是receiveMessage,用于接收由客户端发送的消息。 其他两个方法sessionIdle用于在session空闲10秒钟后关闭该session,第四个方法exceptionCaught用于在异常发生时关闭session。MinaServerHandler类的代码如下:
MinaServerHandler.java
客户端部分
对于客户端部分MinaClient和MinaClientHandler类被我们所使用。在MinaClient类中,IoConnector借口用于与服务器端进行交互并向handler中触发事件。 向服务端一样,同样的LoggingFilter、ProtocolCodecFilter也被使用了。名为ConnectFuture接口被用于处理异步的连接请求。MinaClient类代码如下:
MinaClient.java
对于handler,像服务器部分一样,sessionOpened、messageReceived和exceptionCaught方法同样被使用了。MinaClientHandler类代码如下:
MinaClientHandler.java
现在是对之前代码进行测试的时候了,首先MinaServer应该先被启动然后启动MinaClient,代码的输出类似如下:
MinaServer – 输出
MinaClient – 输出
这就是所有内容。我希望本文清晰的解释了使用Apache Mina 2.0.x的简单的客户端/服务器应用。
Introduction介绍
Mina的缩写意思是”Multipurpose Infrastructure for Network Applications(多用途网络应用基础设施)”,它用于开发高度可扩展和高性能网络应用的网络应用框架。在本文中,让我们看看如何使用Apache Mina2.0.x来创建一个简单的客户端服务器端(c/s)应用。
所需的JAR包
Apache Mina 2.0.x jars
slf4j-api.jar
slf4k-jdk14.jar
服务端部分
对服务器端部分,我们需要使用MinaServer和MinaServerHandler两个类。MinaServer类包含了主方法和名为IoAcceptor的借口来接受来自客户端的进入连接,IoAcceptor用于向handler触发相应的事件。 我们使用了两个过滤器,第一个是LoggingFilter,用于记录所有的事件,第二个是ProtocolCOdecFilter,用于转换进入的ByteBuffer到报文的POJO。MinaServer的类代码如下:
MinaServer.java
package net.javasight.mina; /** * @author javasight */ import java.io.IOException; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.core.session.IdleStatus; 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 MinaServer { private static final int PORT = 1234; public static void main(String[] args) throws IOException { 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 MinaServerHandler()); acceptor.getSessionConfig().setReadBufferSize(2048); acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10); acceptor.bind(new InetSocketAddress(PORT)); } }
接着我们创建一个名为MinaServerHandler自定义handler,它包含了4个方法。第一个方法是sessionOpened在session打开后被调用, 它用于设置session的空闲时间。第二个方法是receiveMessage,用于接收由客户端发送的消息。 其他两个方法sessionIdle用于在session空闲10秒钟后关闭该session,第四个方法exceptionCaught用于在异常发生时关闭session。MinaServerHandler类的代码如下:
MinaServerHandler.java
package net.javasight.mina; 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; /** * @author javasight */ public class MinaServerHandler extends IoHandlerAdapter { private final Logger logger = Logger.getLogger(getClass()); @Override public void sessionOpened(IoSession session) { // set idle time to 10 seconds session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10); session.setAttribute("Values: "); } @Override public void messageReceived(IoSession session, Object message) { logger.info("Message received in the server.."); logger.info("Message is: " + message.toString()); } @Override public void sessionIdle(IoSession session, IdleStatus status) { logger.info("Disconnecting the idle."); // disconnect an idle client session.close(); } @Override public void exceptionCaught(IoSession session, Throwable cause) { // close the connection on exceptional situation session.close(); } }
客户端部分
对于客户端部分MinaClient和MinaClientHandler类被我们所使用。在MinaClient类中,IoConnector借口用于与服务器端进行交互并向handler中触发事件。 向服务端一样,同样的LoggingFilter、ProtocolCodecFilter也被使用了。名为ConnectFuture接口被用于处理异步的连接请求。MinaClient类代码如下:
MinaClient.java
package net.javasight.mina; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.charset.Charset; 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.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.filter.logging.LoggingFilter; import org.apache.mina.transport.socket.nio.NioSocketConnector; /** * @author javasight */ public class MinaClient { private static final int PORT = 1234; public static void main(String[] args) throws IOException, InterruptedException { IoConnector connector = new NioSocketConnector(); connector.getSessionConfig().setReadBufferSize(2048); connector.getFilterChain().addLast("logger", new LoggingFilter()); connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset .forName("UTF-8")))); connector.setHandler(new MinaClientHandler("Hello Server..")); ConnectFuture future = connector.connect(new InetSocketAddress( "172.108.0.12", PORT)); future.awaitUninterruptibly(); if (!future.isConnected()) { return; } IoSession session = future.getSession(); session.getConfig().setUseReadOperation(true); session.getCloseFuture().awaitUninterruptibly(); System.out.println("After Writing"); connector.dispose(); } }
对于handler,像服务器部分一样,sessionOpened、messageReceived和exceptionCaught方法同样被使用了。MinaClientHandler类代码如下:
MinaClientHandler.java
package net.javasight.mina; import org.apache.log4j.Logger; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; /** * @author giftsam */ public class MinaClientHandler extends IoHandlerAdapter { private final Logger logger = Logger.getLogger(getClass()); private final String values; private boolean finished; public MinaClientHandler(String values) { this.values = values; } public boolean isFinished() { return finished; } @Override public void sessionOpened(IoSession session) { session.write(values); } @Override public void messageReceived(IoSession session, Object message) { logger.info("Message received in the client.."); logger.info("Message is: " + message.toString()); } @Override public void exceptionCaught(IoSession session, Throwable cause) { session.close(); } }
现在是对之前代码进行测试的时候了,首先MinaServer应该先被启动然后启动MinaClient,代码的输出类似如下:
MinaServer – 输出
4412 [NioProcessor-2] INFO org.apache.mina.filter.logging.LoggingFilter - CREATED 4412 [NioProcessor-2] INFO org.apache.mina.filter.logging.LoggingFilter - OPENED 4449 [NioProcessor-2] INFO org.apache.mina.filter.logging.LoggingFilter - RECEIVED: HeapBuffer[pos=0 lim=15 cap=2048: 48 65 6C 6C 6F 20 53 65 72 76 65 72 2E 2E 0A] 0 [NioProcessor-2] INFO net.javasight.mina.MinaServerHandler - Message received in the server.. 1 [NioProcessor-2] INFO net.javasight.mina.MinaServerHandler - Message is: Hello Server.. 14453 [NioProcessor-2] INFO org.apache.mina.filter.logging.LoggingFilter - IDLE 10001 [NioProcessor-2] INFO net.javasight.mina.MinaServerHandler - Disconnecting the idle. 14457 [NioProcessor-2] INFO org.apache.mina.filter.logging.LoggingFilter - CLOSED
MinaClient – 输出
297 [NioProcessor-2] INFO org.apache.mina.filter.logging.LoggingFilter - CREATED 297 [NioProcessor-2] INFO org.apache.mina.filter.logging.LoggingFilter - OPENED 325 [NioProcessor-2] INFO org.apache.mina.filter.logging.LoggingFilter - SENT: HeapBuffer[pos=0 lim=0 cap=0: empty] 10334 [NioProcessor-2] INFO org.apache.mina.filter.logging.LoggingFilter - CLOSED After Writing
这就是所有内容。我希望本文清晰的解释了使用Apache Mina 2.0.x的简单的客户端/服务器应用。
- mina_cs.zip (3.1 KB)
- 下载次数: 56
评论
1 楼
白天看黑夜
2017-10-20
Apache Mina Server 2.0 中文参考手册(带目录),有需要的自己下载吧
http://www.itmayun.com/it/files/226631678709806/resource/484719910403706/1.html
http://www.itmayun.com/it/files/226631678709806/resource/484719910403706/1.html
发表评论
-
Eclipse,javaw 通过Proxifile代理ipv6协议问题解决
2015-03-17 18:06 2748myeclipse2010升级到myeclipse2014之后 ... -
初始化EHcache CacheManager时报java.net.UnknownHostException
2014-11-13 11:45 12458工程启动时,报一下异常: [wdfportal] [201 ... -
tomcat7可能带来的问题
2013-06-27 00:31 9431、struts标签校验更加严格,如果struts标签中存在嵌 ... -
iBatis执行insert后返回主键
2013-01-18 23:55 1606iBatis插入数据后,返回主键。级联操作很有用。省去了一次的 ... -
Shallow heap & Retained heap
2012-05-16 17:09 49006所有包含Heap Profling功能的工具(MAT, You ... -
什么是两阶段提交协议
2012-05-08 16:58 1024两阶段提交协议 实现分布式事务的关键就是两阶段提交协议。在此 ... -
Abator —— IBatis 代码生成工具
2012-04-03 18:31 18871、在eclipse安装abator插件http://ibat ... -
使用Eclipse远程调试Tomcat
2012-03-23 22:56 1468有些时候,调试不得不用外网,比如说做支付宝的支付接口,服务器后 ... -
Java compiler level does not match the version of the installed Java project fac
2012-03-02 11:32 1274问题现象:项目图标报错“Java compiler level ... -
WebService的事务处理
2012-03-01 15:03 1524如果你只是要解决两个系统之间的事务同步问题,可以采用判断服务是 ... -
线程池(java.util.concurrent.ThreadPoolExecutor)的使用
2012-02-29 15:50 2477一、简介 线程池类为 j ... -
myeclipse 颜色设置(保护视力)
2012-02-28 09:29 20421.window -> Preferences -> ... -
Quartz表达式解析
2012-02-08 14:40 774字段 允许值 允许的特 ... -
使用iBatis中报 java.sql.SQLException: 无效的列类型异常
2011-12-15 14:46 2198<!--Content表 插入应的 ... -
非常有用的proxool属性详细解说
2011-12-13 16:19 1576Proxool连接池是sourceforge下的一个开源项目, ... -
在工程中查找自己修改的所有代码
2011-12-09 17:41 1013在工程中查找自己修改的所有代码的方法: 1.工程右键 -&g ... -
如何在Eclipse中安装和使用ibatis插件Abator
2011-12-01 21:26 49351、获得abator: http://ibatis. ... -
newCachedThreadPool线程池
2011-11-20 11:35 42975public static ExecutorService n ... -
Class.forName()、Class.forName().newInstance() 、New 三者区别!
2011-11-15 09:18 1218终于明白为什么加载数据库驱动只用Class.forName() ... -
Apache MINA 快速入门指南
2011-11-13 12:04 1623最近用到Socket套接字编程,在服务器监听方面还没有具体思路 ...
相关推荐
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 首先,Mina是个什么东西?看下官方网站(http://mina.apache.org/)对它的解释: Apache的Mina(Multipurpose Infrastructure ...
完整的android消息推送示例,该例子完善了androidpn开源项目,支持离线推送。androidpn基于Apache Mina开源框架,采用XMPP协议传输数据。 实例中,服务端支持weblogic跟tomcat应用服务器。
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...