- 浏览: 182835 次
- 性别:
- 来自: 北京
最新评论
-
u011374223:
获取颜色的方法有两个,07xssfWORKBOOK的需要用这个 ...
apache poi读取excel中的颜色,真是坑爹啊 -
zhangtcb:
读取的颜色和Excel中的不一样啊
apache poi读取excel中的颜色,真是坑爹啊 -
LD_21:
...
log4j日志文件的相对路径 -
xfxlch:
upThx
来,让我们一起画个印章吧 -
xinxinlong:
单元格的style里面有个颜色,如果双击单元格,里面的文字选中 ...
apache poi读取excel中的颜色,真是坑爹啊
最近很无聊,找些新玩意玩玩,正好看到了mina的介绍,下了2.0M5的zip,看看example,再查查资料,写了下面的列子,虽然简单,但是问题还真不少,好在快下班的时候搞定了,留个纪念,有空再扩展.
看名字就知道是啥,看人家的命名,真不是盖得.
唯一一点要注意的就是session在关闭时的参数,如果有数据没有flush,可能就是报错.如果有多个地方同时关闭,可能会死锁...
package com.hcycom.lan; import java.net.InetSocketAddress; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoSession; public class ServerHandler extends IoHandlerAdapter { @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { cause.printStackTrace(); session.close(false); } @Override public void messageReceived(IoSession session, Object message) throws Exception { String s = message.toString(); System.out.println("收到请求:" + s); if (s != null) { int i = getPoint(s); if (session.isConnected()) { if (i >= 95) { session.write("运气不错,你可以出去了."); session.close(false); return; } Integer count = (Integer) session.getAttribute(Server.KEY); count++; session.setAttribute(Server.KEY, count); session.write("抱歉,你运气太差了,第" + count + "次请求未被通过,继续在小黑屋里呆着吧."); } else { session.close(true); } } } @Override public void messageSent(IoSession session, Object message) throws Exception { System.out.println("发给客户端: " + message.toString()); } @Override public void sessionClosed(IoSession session) throws Exception { long l = session.getCreationTime(); System.out.println("来自" + getInfo(session) + "的会话已经关闭,它已经存活了 " + (System.currentTimeMillis() - l) + "毫秒."); } @Override public void sessionCreated(IoSession session) throws Exception { System.out.println("给" + getInfo(session) + "创建了一个新会话."); } @Override public void sessionIdle(IoSession session, IdleStatus status) throws Exception { System.out.println("来自" + getInfo(session) + "的会话在闲置,状态为" + status.toString()); } @Override public void sessionOpened(IoSession session) throws Exception { session.setAttribute(Server.KEY, 0); System.out.println("和" + getInfo(session) + "的会话已经打开."); } public String getInfo(IoSession session) { if (session == null) { return null; } InetSocketAddress address = (InetSocketAddress) session .getRemoteAddress(); int port = address.getPort(); String ip = address.getAddress().getHostAddress(); return ip + ":" + port; } public int getPoint(String s) { if (s == null) { return -1; } Pattern p = Pattern.compile("^[\u0041-\uFFFF,]*(\\d+).*$"); Matcher m = p.matcher(s); if (m.matches()) { return Integer.valueOf(m.group(1)); } return 0; } }
客户端,直接继承了HandlerAdapter,不需要写啥太复杂的东西
package com.hcycom.lan; import java.net.InetSocketAddress; import java.nio.charset.Charset; import java.util.Random; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.future.IoFutureListener; import org.apache.mina.core.service.IoConnector; import org.apache.mina.core.service.IoHandlerAdapter; 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.transport.socket.nio.NioSocketConnector; public class Client extends IoHandlerAdapter { private Random random = new Random(System.currentTimeMillis()); public Client() { IoConnector connector = new NioSocketConnector(); connector.getFilterChain().addLast( "text", new ProtocolCodecFilter(new TextLineCodecFactory(Charset .forName(Server.ENCODE)))); connector.setHandler(this); ConnectFuture future = connector.connect(new InetSocketAddress( "127.0.0.1", Server.PORT)); future.awaitUninterruptibly(); future.addListener(new IoFutureListener<ConnectFuture>() { @Override public void operationComplete(ConnectFuture future) { IoSession session = future.getSession(); while (!session.isClosing()) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } String message = "你好,我roll了" + random.nextInt(100) + "点."; session.write(message); } } }); connector.dispose(); } @Override public void messageReceived(IoSession session, Object message) throws Exception { System.out.println("批复:" + message.toString()); } @Override public void messageSent(IoSession session, Object message) throws Exception { System.out.println("报告:" + message.toString()); } @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { cause.printStackTrace(); session.close(true); } public static void main(String[] args) { for (int i = 0; i < 10; i++) { new Client(); } } }
server端,更简单,就是要注意filter,客户端要和服务器端一致,这里用的是传字符串的,mina实现了很多filter,包括传对象的,有空再玩.
package com.hcycom.lan; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.SocketAcceptor; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; public class Server { public static final int PORT = 2534; public static final String ENCODE = "UTF-8"; public static final String KEY = "roll"; public static void main(String[] args) { SocketAcceptor acceptor = new NioSocketAcceptor(); acceptor.getFilterChain().addLast( "text", new ProtocolCodecFilter(new TextLineCodecFactory(Charset .forName(ENCODE)))); acceptor.setHandler(new ServerHandler()); try { acceptor.bind(new InetSocketAddress(PORT)); System.out.println("游戏开始,你想出去吗,来,碰碰运气吧!"); } catch (IOException e) { e.printStackTrace(); acceptor.dispose(); } } }
发表评论
-
公约数,公倍数和素数的简单计算
2012-04-01 16:08 1331为自己留作备份,省得用到的时候再去寻找 简单的计算最大公约数 ... -
java简单打印
2012-03-08 09:56 1234没什么,就是一个简单的打印,留作存档 publi ... -
httpclient4的封装
2012-01-06 15:11 4636没什么特别的,自己封装着用的. package cpcns. ... -
h2的baseDir
2011-11-11 16:38 1464使用h2 1.3.161.在web项目中.计划在Listene ... -
eclipse下自动打包项目并部署到web项目的lib下
2011-10-18 15:59 5119修改web项目的.settings下的org.eclipse. ... -
获取汉字的五笔,全拼和双拼的工具类
2011-10-10 15:51 2393如题,项目需要,首先可用的自然是pinyin4j. 在不考虑 ... -
五笔86和汉字对照表
2011-10-09 16:53 2533项目要用到汉字转拼音和五笔,拼音容易,使用pinyin4j. ... -
java System属性
2011-09-19 10:14 1387自定义 : java -Dname=value S ... -
log4j日志文件的相对路径
2011-09-01 10:51 6813一直没能很好的解决log4j的日志文件的保存路径.今天恰好又遇 ... -
Apache codec中的base64
2011-07-20 09:46 2287一直使用sun的base64,但是感觉不是很好,毕竟不是标准包 ... -
来,让我们一起画个印章吧
2011-07-04 14:52 4530这几天发现有哥们在介 ... -
svg中的arc转化为java中的arc
2011-05-27 15:31 2682最近项目需要解析svg中的path.直线和贝塞尔曲线都好办,唯 ... -
swing的拖拽(dnd)的简单实现
2011-03-28 10:18 2008这几天项目需要用到dnd,API比较麻烦.在网上找了很多,都只 ... -
自用的MD5计算工具
2011-03-11 15:45 1783/** * 检查输入流的MD5值是否符合.如果MD5为 ... -
用jsoup分析下载巨鲸的mp3
2011-02-25 15:37 1727这两天突然想听听杰克逊的歌.首选当然是巨鲸. 支持正版. ... -
获取子类的泛型参数
2011-01-27 16:03 1358用的时候不好找,今天看nutz的dao的源码看到了,摘出来备份 ... -
简单的通过注解运行的dao
2011-01-26 11:47 1792项目是个老项目,是个比较简单,但是编码比较凌乱的项目.数据库字 ... -
java模拟js的escape和unescape函数
2011-01-05 10:43 3468这个是在网上找的代码,然后修改了下.作用标题已经很明显了. ... -
自己写的多线程对象池
2010-12-10 16:53 1322/** * 排版器的一个公用接口 <br> ... -
apache poi读取excel中的颜色,真是坑爹啊
2010-12-01 16:23 16973工作原因,需要使用poi来读取excel中的所有内容. 其他 ...
相关推荐
《Mina小Demo聊天工具详解》 Mina小Demo是一款基于Java开发的轻量级聊天工具,它利用了Apache Mina框架,集成了Swing图形用户界面,使得用户可以方便地进行实时通信。这款工具的独特之处在于其独立性,不仅可以在...
7. **minaDemo项目结构**:压缩包中的minaDemo项目可能包含以下组件:主类(启动服务)、配置文件(如XML配置服务)、过滤器实现、编码解码器、以及IoHandler的实现。通过分析这个Demo,我们可以了解到如何实际搭建...
"MinaDemo"是使用MINA框架的一个示例项目,通常包含了从创建服务器端到客户端连接的基本流程。 在MINA中,服务端主要通过`ServerBootstrap`类配置并启动,它允许开发者定制I/O处理模型、线程模型、协议编码解码器等...
这个“mina聊天Demo”是一个基于Mina实现的简单聊天应用示例,利用Java Swing作为客户端界面。在这个项目中,我们将深入探讨Mina的核心概念、如何与Swing集成以及如何构建一个基本的聊天系统。 1. **Apache Mina...
在"MinaDemo"项目中,主要包含以下几个关键部分: - **Bootstrap**: 定义服务器或客户端的启动配置,包括传输协议、处理器、事件处理器等。 - **Handler**: 处理网络事件的类,如连接建立、数据读写、连接关闭等。 ...
在这个"Mina开发实例(服务端、客户端)DEMO"中,我们将深入探讨Mina如何实现长连接通讯。 首先,我们来理解服务端(Server)的实现。在Mina中,服务端通常通过`IoAcceptor`接口来创建,它是监听并接受客户端连接的...
**Mina 框架详解及DEMO演示** Apache Mina 是一款开源的网络通信框架,主要用于构建高性能、高效率的网络应用服务器。Mina 提供了一种抽象层,简化了网络编程,允许开发者专注于业务逻辑,而无需关心底层协议的实现...
**mina即时聊天demo** Mina(Java Multithreaded Application Network Architecture)是一个开源的网络通信框架,由Apache软件基金会开发并维护。它提供了一个高度可扩展的、高性能的、事件驱动的I/O服务架构,广泛...
《mina demo全套》详解 Apache Mina是一个高度可扩展且基于事件驱动的网络通信框架,主要应用于Java平台。它提供了一种简单的方式来构建高性能、高可用性的网络应用程序,如服务器和客户端。Mina的核心概念是它支持...
《mina客户端服务器简易Demo详解》 Apache Mina(Minimum Asynchronous Network)是一个开源的网络通信框架,它为Java开发者提供了一种简单而高效的方式来构建高性能、高可用性的网络应用程序,如TCP/IP和UDP/IP...
在这个"Apache MINA2学习笔记DEMO"中,我们很可能会看到如何使用MINA来创建一个自定义协议的示例。自定义协议通常是为了满足特定应用的需求,例如高效的数据传输、安全性或者特定的编码格式。MINA允许开发者定义自己...
《MINA2推送Demo客户端详解及应用》 MINA(Multi-purpose Infrastructure for Network Applications)是一个高性能、异步的网络通信框架,由Apache软件基金会开发,主要用于构建网络应用程序,如TCP/IP和UDP/IP协议...
**Mina UDP Demo详解** Mina (Java Invented Network Application Platform) 是一款强大的网络通信框架,主要用于构建高性能、高可用性的网络应用。它提供了一种简单的方式来处理TCP/IP和UDP/IP协议,使得开发者...
Mina框架是一个基于Java的网络通信应用框架,它为高性能、高可用性的网络应用程序提供了强大的支持。本教程将深入探讨Mina框架的入门与开发,帮助你快速掌握这个框架的关键概念和技术。 首先,理解Mina的核心概念至...
**Android使用Mina与服务器通信Demo** Mina(Minimum Asynchronous Network)是一个高度可扩展的、高性能的网络应用开发框架,常用于构建基于TCP和UDP的网络应用,如服务器和客户端。在Android平台上,Mina可以帮助...
在这个"Mina框架使用demo"中,我们将深入探讨如何利用Mina来实现长连接,以及如何使用其提供的API,如心跳服务和自定义编解码器。 首先,长连接是网络通信中的一个关键概念,它允许客户端和服务器之间的连接保持...
"Mina demo mina jar包"指的是使用Apache Mina框架创建的一个演示示例,这个示例展示了如何运行一个基本的服务端,能够接收客户端的数据并返回响应。 在Mina框架中,服务端通常会创建一个Acceptor,监听特定的端口...
这个“Mina通信demo”是为了帮助初学者理解和掌握Mina的基本用法而创建的。通过分析这个demo,我们可以深入理解Mina如何实现客户端与服务器之间的高效通信。 **1. Mina简介** Mina全称为"Minimum Asynchronous ...
Apache MINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序。它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步API。 上传自己修改的demo,java版...
Apache组织应用程序(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。mina经典demo,希望对后来人有所帮助