这个代码我是不是写错了?执行 SelectionKey.OP_WRITE 不是应该触发 key.isWritable()的吗?
Selector selector = Selector.open();
DatagramChannel channel = DatagramChannel.open();
channel.configureBlocking(false);
channel.connect(new InetSocketAddress(Net.toInetAddress("139.155.182.112"), 3478));
SelectionKey selectionKey = channel.register(selector, 0);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@
Override public void onClick(View v) {
selectionKey.interestOps(SelectionKey.OP_WRITE);//这里是点击按钮,执行写人就绪
}
});
while (selector.select() > 0) {
Set<SelectionKey> keys = selector.selectedKeys();
// 遍历每个有可用 IO 操作 Channel 对应的 SelectionKey
for (SelectionKey key : keys) {
if (key.isWritable()) {//////////////////////这里为什么没有触发呢?????????????????????
Main.WriteLine("send...");
channel.write(ByteBuffer.allocate(1));
selectionKey.interestOps(0);
}
}
keys.clear();
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/875838
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.