Java NIO连接到套接字

时间:2012-11-12 16:00:06

标签: 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()方法之前检查并等待连接?

2 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:0)

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

    socketChannel = SocketChannel.open(address);            
    socketChannel.configureBlocking(false);

    while (!socketChannel.finishConnect());

   //my code after connection

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