NIO的一个问题 关于Interest set的问题

今天例外 2017-12-06 03:52:02

package Server;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.*;
import java.util.Iterator;

public class SeverChannel {

public static void main(String[] args) {
// TODO Auto-generated method stub
Start();
}
public static void Start() {

ServerSocketChannel ssc=null;
Selector s=null;
try {
ssc=ServerSocketChannel.open();
s=Selector.open();
ssc.socket().bind(new InetSocketAddress(10086));
ssc.configureBlocking(false);
System.out.println(SelectionKey.OP_ACCEPT|SelectionKey.OP_CONNECT|SelectionKey.OP_READ|SelectionKey.OP_WRITE);
ssc.register(s,SelectionKey.OP_ACCEPT|SelectionKey.OP_CONNECT|SelectionKey.OP_READ|SelectionKey.OP_WRITE);
while(true) {
if(s.select()==0)
{continue;}
Iterator<SelectionKey> keys=s.selectedKeys().iterator();
while(keys.hasNext()) {
SelectionKey key=keys.next();
if(key.isAcceptable())
System.out.println("Accept");
if(key.isConnectable())
System.out.println("Connect");
if(key.isWritable())
System.out.println("Write");
if(key.isReadable())
System.out.println("Read");
keys.remove();
}

}


} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {

try {
ssc.close();
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

}




Exception in thread "main" java.lang.IllegalArgumentException
at java.nio.channels.spi.AbstractSelectableChannel.register(Unknown Source)
at java.nio.channels.SelectableChannel.register(Unknown Source)
at Server.SeverChannel.Start(SeverChannel.java:24)
at Server.SeverChannel.main(SeverChannel.java:12)

我指定除了SelectionKey.OP_ACCEPT 以外任何一个都有上面的相同问题,我有一下几个问题:

1. 这几个兴趣集在使用时还要注意什么场景?

2.这几个兴趣集有先后顺序?
...全文
140 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
今天例外 2017-12-15
  • 打赏
  • 举报
回复
再补充一下, ServerSocketChannel 只支持 Accept, SocketChannel 支持另外三种, 而Connectable 是说为连接服务端做好了准备的时候才会触发, 并不是连接服务端完成后才会触发的意思,一般SocketChannel端触发了这个事件后,会做Connect()的行为。 另外两个就很简单了: Readable 是说有信息发过来才会触发, Writeable 是随时都会被触发的,好像只要设置了对这个Write事件感兴趣就会触发. 如有不对,欢迎补充
逗比123号 2017-12-06
  • 打赏
  • 举报
回复
ServerSocketChannel只支持accept,SocketChannel另外三个都支持。

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧