Java NIO连接到套接字

我正在尝试连接到远程服务器并在我的线程中发送登录消息:

@Override public void run() { try { address = new InetSocketAddress(host, port); incomingMessageSelector = Selector.open(); socketChannel = SocketChannel.open(); socketChannel.configureBlocking(false); socketChannel.connect(address); socketChannel.register(incomingMessageSelector, SelectionKey.OP_READ); serverManager.loginToServer(); } } 

loginServer()是一个向服务器发送消息的方法,但我不断得到:

 java.nio.channels.NotYetConnectedException 

如何在发送此loginServer()方法之前检查并等待连接?

如果您以非阻止模式连接,您应该:

  • 注册OP_CONNECT的通道
  • 当它触发时调用finishConnect()
  • 如果返回true,则取消注册OP_CONNECT并注册OP_READOP_WRITE具体取决于您下一步要做什么
  • 如果它返回false,则不执行任何操作,继续选择
  • 如果connect()finishConnect()抛出exception,请关闭该频道finishConnect()试或忘记它或告诉用户或任何适当的内容。

如果在通道连接之前不想做任何事情,请在阻塞模式下进行连接,并在连接成功时进入非阻塞模式。

我找到了答案..我应该使用:

  socketChannel = SocketChannel.open(address); socketChannel.configureBlocking(false); while (!socketChannel.finishConnect()); //my code after connection 

因为NIO处于非阻塞模式,我们必须等到它完成连接