Android 上的 Java NIO:在连接仍处于挂起状态时尝试读/写?

Cha*_*Kut 1 networking android nio

这个问题涉及 Android 上的 Java NIO(2.2,尽管必要时我可以构建更高的 API):对目标 IP 地址执行 SocketChannel connect() 后,我注册我的通道以进行 READ 操作。问题是,当我尝试对生成的选定键集执行 READ 时,我收到 NotYetConnectedException。虽然我可以在尝试读取之前使用 isConnectionPending 检查通道的状态,但理想情况下,我希望仅在连接实际工作时才选择读取键。有任何想法吗?

use*_*421 5

你这样做是错的。

当连接挂起时,通道只能注册为OP_CONNECT

OP_CONNECT发生火灾时,您必须调用finishConnect(),然后进行如下操作:

  1. 如果它返回 true,则您必须注销OP_CONNECT,然后您可以注册OP_READOP_WRITE

  2. 如果返回 false,则不执行任何操作:连接仍处于挂起状态。

  3. 如果抛出异常,则连接失败,您必须关闭通道。