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

Android上的Java NIO:在连接仍挂起时尝试读/写?,android,networking,nio,Android,Networking,Nio,这个问题涉及Android上Java的NIO(2.2,不过如果需要,我可以构建更高的API):在对目标IP地址执行SocketChannel connect()之后,我注册通道进行读取操作。问题是,当我尝试对生成的选定密钥集执行读取时,我收到NotYetConnectedException。虽然我可以在尝试读取之前使用isConnectionPending检查通道的状态,但理想情况下,我希望只有在连接实际工作时才选择读取键。有什么想法吗?你做错了 连接挂起时,只能为OP\u CONNECT注册通

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

你做错了

连接挂起时,只能为
OP\u CONNECT
注册通道

当触发
OP\u CONNECT
时,必须调用
finishConnect()
,然后按以下步骤进行操作:

  • 如果返回true,则必须取消注册
    OP\u CONNECT
    ,然后可以注册
    OP\u READ
    OP\u WRITE

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

  • 如果它引发异常,则连接失败,您必须关闭通道


  • 如何取消注册
    OP\u CONNECT
    ?我认为
    key.interestTops(0)
    应该可以工作。您可以直接切换到OP_READ或OP_WRITE
    key.interesttop(选择key.OP_READ)