- 浏览: 199749 次
- 性别:
- 来自: 北京
最新评论
-
毛毛虫小白:
您好,这里说的基于角色标注就是用到了字体位频率表里,在“名字内 ...
介绍一种基于角色标注+字词体位法的人名识别方式-Ansj中文分词 -
assasszt:
请问 能不能加入写入文件功能,不然的话 是每次 执行 都是一个 ...
Java版本的BloomFilter (布隆过滤器) -
lhj_6270:
楼主不错。果然不是一般人。再接再厉弄个软件出来。
Java版本的BloomFilter (布隆过滤器) -
ansjsun:
fncj 写道你好,我们最近要搞一个人名识别功能,发现有两个问 ...
介绍一种基于角色标注+字词体位法的人名识别方式-Ansj中文分词 -
fncj:
你好,我们最近要搞一个人名识别功能,发现有两个问题:1、里有不 ...
介绍一种基于角色标注+字词体位法的人名识别方式-Ansj中文分词
我当时花了5分下载下来的.在这里免费发布..有参考价值要给我留言啊..做人要有人品的
package test.sockettest; /** * * @author chenjd */ import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.channels.SelectableChannel; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.nio.charset.CharacterCodingException; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class NBServer { int port = 8090; int BUFFERSIZE = 1024; Selector selector = null; ServerSocketChannel serverChannel = null; HashMap clientChannelMap = null;// 用来存放每一个客户连接对应的套接字和通道 public NBServer(int port) { this.clientChannelMap = new HashMap(); this.port = port; } public void initialize() throws IOException { // 初始化,分别实例化一个选择器,一个服务器端可选择通道 this.selector = Selector.open(); this.serverChannel = ServerSocketChannel.open(); this.serverChannel.configureBlocking(false); InetAddress localhost = InetAddress.getLocalHost(); InetSocketAddress isa = new InetSocketAddress(localhost, this.port); this.serverChannel.socket().bind(isa);// 将该套接字绑定到服务器某一可用端口 } // 结束时释放资源 public void finalize() throws IOException { this.serverChannel.close(); this.selector.close(); } // 将读入字节缓冲的信息解码 public String decode(ByteBuffer byteBuffer) throws CharacterCodingException { Charset charset = Charset.forName("ISO-8859-1"); CharsetDecoder decoder = charset.newDecoder(); CharBuffer charBuffer = decoder.decode(byteBuffer); String result = charBuffer.toString(); return result; } // 监听端口,当通道准备好时进行相应操作 public void portListening(String data) throws IOException, InterruptedException { // 服务器端通道注册OP_ACCEPT事件 SelectionKey acceptKey = this.serverChannel.register(this.selector, SelectionKey.OP_ACCEPT); // 当有已注册的事件发生时,select()返回值将大于0 while (acceptKey.selector().select() > 0) { System.out.println("event happened"); // 取得所有已经准备好的所有选择键 Set readyKeys = this.selector.selectedKeys(); // 使用迭代器对选择键进行轮询 Iterator i = readyKeys.iterator(); while (i.hasNext()) { SelectionKey key = (SelectionKey) i.next(); i.remove();// 删除当前将要处理的选择键 if (key.isAcceptable()) {// 如果是有客户端连接请求 System.out.println("more client connect in!"); ServerSocketChannel nextReady = (ServerSocketChannel) key .channel(); // 获取客户端套接字 Socket s = nextReady.accept().socket(); // 设置对应的通道为异步方式并注册感兴趣事件 s.getChannel().configureBlocking(false); SelectionKey readWriteKey = s.getChannel().register( this.selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE); // 将注册的事件与该套接字联系起来 readWriteKey.attach(s); // 将当前建立连接的客户端套接字及对应的通道存放在哈希表//clientChannelMap中 this.clientChannelMap.put(s, new ClientChInstance(s .getChannel())); } else if (key.isReadable()) {// 如果是通道读准备好事件 System.out.println("Readable"); // 取得选择键对应的通道和套接字 SelectableChannel nextReady = (SelectableChannel) key .channel(); Socket socket = (Socket) key.attachment(); // 处理该事件,处理方法已封装在类ClientChInstance中 this.readFromChannel(socket.getChannel(), (ClientChInstance) this.clientChannelMap .get(socket)); } else if (key.isWritable()) {// 如果是通道写准备好事件 System.out.println("writeable"); // 取得套接字后处理,方法同上 Socket socket = (Socket) key.attachment(); SocketChannel channel = (SocketChannel) socket.getChannel(); // this.writeToChannel(channel, "This is from server!"); this.writeToChannel(channel, data); } } } } // 对通道的写操作 public void writeToChannel(SocketChannel channel, String message) throws IOException { ByteBuffer buf = ByteBuffer.wrap(message.getBytes()); int nbytes = channel.write(buf); } // 对通道的读操作 public void readFromChannel(SocketChannel channel, ClientChInstance clientInstance) throws IOException, InterruptedException { ByteBuffer byteBuffer = null; try{ byteBuffer = ByteBuffer.allocate(BUFFERSIZE); int nbytes = channel.read(byteBuffer); }catch(Exception e){ clientChannelMap.remove(channel.socket()); channel.close(); e=null; return; } byteBuffer.flip(); String result = this.decode(byteBuffer); // 当客户端发出”@exit”退出命令时,关闭其通道 if (result.indexOf("@exit") >= 0||result.indexOf("q")>=0) { channel.close(); } // else if(result.indexOf("@close") >= 0){//关闭服务 // channel.close(); // this.finalize(); // } else { clientInstance.append(result.toString()); // 读入一行完毕,执行相应操作 if (result.indexOf("\n") >= 0) { System.out.println("client input" + result); clientInstance.execute(); } } } // 该类封装了怎样对客户端的通道进行操作,具体实现可以通过重载execute()方法 public class ClientChInstance { SocketChannel channel; StringBuffer buffer = new StringBuffer(); public ClientChInstance(SocketChannel channel) { this.channel = channel; } public void execute() throws IOException { String message = "This is response after reading from channel!"; writeToChannel(this.channel, message); buffer = new StringBuffer(); } // 当一行没有结束时,将当前字窜置于缓冲尾 public void append(String values) { buffer.append(values); } } // 主程序 public static void main(String[] args) { NBServer nbServer = new NBServer(8090); try { nbServer.initialize(); } catch (Exception e) { e.printStackTrace(); System.exit(-1); } try { nbServer.portListening("This is from server!"); } catch (Exception e) { e.printStackTrace(); } } }
评论
6 楼
dizhuang
2012-02-13
我搞不懂为什么需要注册Write事件,我注册Read了,一边读取一边处理不就可以了。
5 楼
chasewade
2012-02-10
多谢分享啊
4 楼
lsrjava
2011-11-10
学习一下,感谢楼主的分享啊
3 楼
wupuyuan
2011-09-14
谢谢分享,一定要顶下
2 楼
maenliang1989
2011-09-14
好一个事件驱动模型
1 楼
qitongster
2011-08-17
我不知道是否有参考价值,但是很感谢你的这种奉献精神,5分不便宜啊!
没有到用socket编程的环境和境界,有机会再参考吧。
没有到用socket编程的环境和境界,有机会再参考吧。
发表评论
-
介绍一种基于角色标注+字词体位法的人名识别方式-Ansj中文分词
2012-09-14 13:35 7085大家好.最近在做分词.在分词中遇到了各种各样的问题 ... -
介绍一种基于角色标注+字词体位法的人名识别方式-Ansj中文分词
2012-09-14 13:04 13大家好.最近在做分词.在分词中遇到了各种各样的问题 ... -
Combining Probabilities-结合概率
2012-04-19 14:23 0这就是联合概率的计算公式 介绍..原文 htt ... -
贝叶斯学习笔记
2012-04-19 11:21 1569一.什么是贝叶斯 ... -
大话字符编码发展史
2012-04-06 17:17 3713ASCII码 ASCII码于1968年提出,用于在不同计 ... -
新浪微博采集利用javascript爬取
2012-02-16 16:17 85在一个群里有人问新浪微博的抓取. 因为需求特殊..试了一次通 ... -
元宵爬虫-YuanXiaoSpider
2012-02-06 12:25 4529翻译了下..没有元宵的淫文啊....所以用PinYing吧.. ... -
到1亿的自然数,求所有数的拆分后的数字之和
2012-02-02 16:57 2076public static void main(String[ ... -
<<这就是搜索引擎>>学习笔记-算法之索引压缩
2012-01-19 16:20 2262前一段时间.在微博上中奖了. 一个叫张俊林的帅锅.送了俺一本书 ... -
文本相似度计算-Levenshtein
2012-01-13 11:26 1985参见网址http://www.merriamp ... -
一个不会重复的HelloWord 随机大小写....
2011-12-01 16:53 1157一个不会重复的HelloWord 随机大小写.... 代码没有 ... -
简单版数独计算器-升级版
2011-11-03 12:28 1644只能算初级的..高级的就溢出了 就算内存无穷大.可能性超过 ... -
java算法专题-归并排序
2011-11-02 21:32 1393归并的思想就是分治.时间复杂度..忘记了 大概实现了下..还 ... -
一个关键字标红的通用类
2011-09-15 20:32 3370import java.lang.reflect.Array; ... -
二分法查找
2011-09-13 15:03 1726import java.util.Arrays; / ... -
二叉树法插入查找例子
2011-09-13 14:52 1376二分法查找...查找... 代码比较简单...没有注释了 ... -
java Hash算法大全(转载的)
2011-09-09 00:05 2753/** * Hash算法大全<br> * 推荐 ... -
Java版本的BloomFilter (布隆过滤器)
2011-09-08 17:38 11026哈哈...我终于写了个BloomFilter 这个是干嘛用的 ... -
BitMap 用于查重..只能查数字
2011-09-01 10:26 2545package ansj.sun.util; public ... -
2B高亮.单位要用凑合用吧..自己趁着老婆洗狗的时候写的
2011-08-29 21:12 1381没有用任何算法.没有用 ...
相关推荐
★ 在一个程序内可进行多句柄/多类型的Socket的创建/删除/以及数据收发等操作 ★ 支持16进制的发送和16进制接收显示,支持汉字以及文本发送 ★ 用户可以方便的把接收到的数据保存下来 ★ 支持发送、接收字节...
网络编程中,通常使用socket套接字编程,那么该如何使用呢?接下来我们做一个最基本的小程序实现其功能。博客地址:http://blog.csdn.net/bingdianlanxin,有问题欢迎留言!
Xsocket_V2_8_15.rar 一个开源的基于TCP的Socket通信框架...内含开发包、源码和javadoc,javadoc用htmlParser(http://download.csdn.net/detail/liu149339750/4672852)从网站上抓下来的,源码也是从网站上抓下来的。
使用了六个类五个模块类演示了atl的调用方法 class CDHtmlSinkHandler; // Events Sink Base class CDHtmlEventSink; // IHTMLDocument2 Events Sink // IDispatch class CDHtmlControlSink; // ActiveX Control ...
源代码是CSDN上一位前辈的,我只做了代码整理和优化,测试下来四路D1同时放,延时约2s.用法流程如下: 1.InitRtspServer(); 2.udpfd = socket(AF_INET,SOCK_DGRAM,0);//UDP 3.SAMPLE_COMM_VENC_Sentjin(&stStream); ...
Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG ,明白这一点很重要,这里Log4j有一个规则:假设Loggers级别为P,如果在Loggers中发生了一个级别Q比P高,则...
CSDN免积分下载工具 源码 演示了使用CInternetSession去下载资源。 CStatic文字滚动 如题,此实例非常适合学习,重载并自绘了Wnd类,效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果。实例使用了加载类似...
CSDN免积分下载工具 源码 演示了使用CInternetSession去下载资源。 CStatic文字滚动 如题,此实例非常适合学习,重载并自绘了Wnd类,效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果。实例使用了加载类似...
CSDN免积分下载工具 源码 演示了使用CInternetSession去下载资源。 CStatic文字滚动 如题,此实例非常适合学习,重载并自绘了Wnd类,效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果。实例使用了加载类似...
CSDN免积分下载工具 源码 演示了使用CInternetSession去下载资源。 CStatic文字滚动 如题,此实例非常适合学习,重载并自绘了Wnd类,效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果。实例使用了加载类似...
CSDN免积分下载工具 源码 演示了使用CInternetSession去下载资源。 CStatic文字滚动 如题,此实例非常适合学习,重载并自绘了Wnd类,效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果。实例使用了加载类似...
虽然不是完整版,而且代码没有重构,但也不至于很乱,缺点是我把功能都放在服务端,这样做当然是不合理的,所以大家把代码看懂后可以自己改,资源绝对不是那些垃圾资源,我也很讨厌那种很贵然后下下来是垃圾的资源!...
private 也被集成,只事派生类没有访问权限而已 virtual可加可不加 子类的空间里有父类的所有变量(static除外) 同一个函数只存在一个实体(inline除外) 子类覆盖它的函数不加virtual ,也能实现多态。 在子类的...