请教nio socket的问题 本帖最后由 theflycloud 于 2011-01-25 11:33:47 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 长话短说,给你看篇文章http://julyboxer.javaeye.com/blog/298244希望对你有帮助 为防止重复迭代要执行remove,在执行selector.select()时,会自动加入去掉的key。 while (true) // 不断的轮询 { debug("NBTest: Starting select"); // Selector通过select方法通知我们我们感兴趣的事件发生了。 nKeys = selector.select(); // 如果有我们注册的事情发生了,它的传回值就会大于0 if (nKeys > 0) { //debug("NBTest: Number of keys after select operation: " + nKeys); // Selector传回一组SelectionKeys // 我们从这些key中的channel()方法中取得我们刚刚注册的channel。 Set selectedKeys = selector.selectedKeys(); Iterator i = selectedKeys.iterator(); while (i.hasNext()) { s = (SelectionKey) i.next(); //printKeyInfo(s); //debug("NBTest: Nr Keys in selector: " // + selector.keys().size()); // 一个key被处理完成后,就都被从就绪关键字(ready keys)列表中除去 i.remove(); if (s.isAcceptable()) { // 从channel()中取得我们刚刚注册的channel。 Socket socket = ((ServerSocketChannel) s.channel()) .accept().socket(); SocketChannel sc = socket.getChannel(); sc.configureBlocking(false); sc.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE); //System.out.println(++channels); debug("NBTest: Channel acceptable"); } else { debug("NBTest: Channel not acceptable"); } } } else { debug("NBTest: Select finished without any keys."); } }我也是刚学,网上找的代码不是已经remove了么,但是还是不行 j2ee filter java基础,帮看一下,有不明的地方 为什么同一个int型变量要进行比较? 单击按钮,如何使JTable的某列内容改变? 请教关于JAVA下载文件的问题,望高手们指教 linux下面安装jdk的问题 怎么样将这个围棋的程序改成自动吃子的? 关于SOCKET的问题 Java能否实现服务器端的push技术 雷老虎,这几天在吧:)看了几天书……,又有几个问题了:) 求解: 为什么类的构造函数可以没有名字 多线程数据同步问题
http://julyboxer.javaeye.com/blog/298244
希望对你有帮助
会自动加入去掉的key。
{
debug("NBTest: Starting select"); // Selector通过select方法通知我们我们感兴趣的事件发生了。
nKeys = selector.select();
// 如果有我们注册的事情发生了,它的传回值就会大于0
if (nKeys > 0) {
//debug("NBTest: Number of keys after select operation: " + nKeys); // Selector传回一组SelectionKeys
// 我们从这些key中的channel()方法中取得我们刚刚注册的channel。
Set selectedKeys = selector.selectedKeys();
Iterator i = selectedKeys.iterator();
while (i.hasNext()) {
s = (SelectionKey) i.next();
//printKeyInfo(s);
//debug("NBTest: Nr Keys in selector: "
// + selector.keys().size()); // 一个key被处理完成后,就都被从就绪关键字(ready keys)列表中除去
i.remove();
if (s.isAcceptable()) {
// 从channel()中取得我们刚刚注册的channel。
Socket socket = ((ServerSocketChannel) s.channel())
.accept().socket();
SocketChannel sc = socket.getChannel(); sc.configureBlocking(false);
sc.register(selector, SelectionKey.OP_READ
| SelectionKey.OP_WRITE);
//System.out.println(++channels);
debug("NBTest: Channel acceptable");
} else {
debug("NBTest: Channel not acceptable");
}
}
} else {
debug("NBTest: Select finished without any keys.");
} }我也是刚学,网上找的代码不是已经remove了么,但是还是不行