我试图连接到远程服务器并在我的线程中发送登录消息:
@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()方法之前检查并等待连接?
答案 0 :(得分:10)
如果您以非阻止模式连接,则应该:
OP_CONNECT
finishConnect()
OP_CONNECT
并注册OP_READ
或OP_WRITE
,具体取决于您下一步要做什么connect()
或finishConnect()
引发异常,请关闭该频道并重试或忘记该频道或告诉用户或其他任何内容。如果在通道连接之前不想做任何事情,请在阻塞模式下进行连接,并在连接成功时进入非阻塞模式。
答案 1 :(得分:0)
我找到了答案..我应该使用:
socketChannel = SocketChannel.open(address);
socketChannel.configureBlocking(false);
while (!socketChannel.finishConnect());
//my code after connection
因为NIO处于非阻塞模式,我们必须等到它完成连接