0

我正在尝试使用 NIO 在 Android 中编写服务器。在我的 ServerChannel 被接受后,我已经注册了 OP_READ、OP_WRITE。

但是,有线的事情是......在while循环中,在我这样做之后:

SelectionKey key = (SelectionKey) iterator.next();
iterator.remove();

在里面:

if(key.isReadable()){
} else if(key.isWritable()){

似乎 isReadable 从未返回 true。

我的客户端代码是两个线程,一个线程用于读取,另一个线程用于写入。我想知道为什么会这样..?我认为如果有人能给我一些关于 Java NIO 中客户端处理的参考,那将会很有帮助。

非常感谢,

4

2 回答 2

3

您通常不应该注册 OP_WRITE。它几乎总是准备就绪。您应该只在获得短写入结果时使用它,这表明发送缓冲区已满。另一方面,OP_READ 仅在发送缓冲区中有数据时才准备就绪。您的回答中没有任何内容表明存在问题。我想知道您是否以某种方式在精神上没有这些状态。

于 2013-03-04T05:01:31.713 回答
0

我在理解 .register 方法时犯了一个错误,正确的方法是:

client.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE);

而我所做的是:

client.register(selector, SelectionKey.OP_READ);
client.register(selector, SelectionKey.OP_WRITE);

因此后者取代了前者。

于 2013-03-05T09:22:56.437 回答