Java NIO连接到套接字

Asa*_*evo 1 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

java.nio.channels.NotYetConnectedException
Run Code Online (Sandbox Code Playgroud)

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

use*_*421 10

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

  • 注册频道 OP_CONNECT
  • 当它拨打电话时 finishConnect()
  • 如果返回true,则取消注册OP_CONNECT并注册,OP_READ或者OP_WRITE取决于您接下来要做什么
  • 如果它返回false,则不执行任何操作,继续选择
  • 如果是connect()或者finishConnect()抛出异常,关闭频道并再试一次或忘记它或告诉用户或任何适当的.

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