Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 阻塞SocketChannel连接会返回错误吗?_Java_Nio_Socketchannel - Fatal编程技术网

Java 阻塞SocketChannel连接会返回错误吗?

Java 阻塞SocketChannel连接会返回错误吗?,java,nio,socketchannel,Java,Nio,Socketchannel,当我阅读SocketChannel的文档时,似乎很清楚阻塞的SocketChannel connect()调用只会返回true或抛出异常。换句话说,它只能在非阻塞模式下返回false。这是对的,还是我遗漏了什么/误读了什么 channel.configureBlocking(true)是否可能返回且通道不处于阻塞模式?我预计,如果configureBlocking(true)无法成功地将通道置于阻塞模式(在方法调用返回之前),将引发异常。对吗 最后,有没有办法让下面的代码无法连接,但返回TRUE

当我阅读SocketChannel的文档时,似乎很清楚阻塞的SocketChannel connect()调用只会返回true或抛出异常。换句话说,它只能在非阻塞模式下返回false。这是对的,还是我遗漏了什么/误读了什么

channel.configureBlocking(true)是否可能返回且通道不处于阻塞模式?我预计,如果configureBlocking(true)无法成功地将通道置于阻塞模式(在方法调用返回之前),将引发异常。对吗

最后,有没有办法让下面的代码无法连接,但返回TRUE?(代码只测试连接是否成功,它对通道没有任何作用,因此立即关闭):

谢谢

  • Javadoc明确指出“如果此通道处于阻塞模式,则此方法的调用将阻塞,直到建立连接或发生I/O错误”。因此,它要么返回
    true
    ,要么抛出异常

  • “channel.configureBlocking(true)是否可能返回且通道未处于阻塞模式?”否。如果无法执行该操作,它将引发异常。Javadoc中也清楚地说明了这一点


  • 你在这个问题上的所有假设都是正确的。代码将连接或返回
    FALSE
    。你有什么问题吗?@kiruwka他不是这么说的,这是不对的。它要么连接并返回TRUE,要么抛出异常。他的问题说得相当清楚。
    SocketChannel channel = null;
    try {
        channel = SocketChannel.open();
        channel.configureBlocking(true);
        channel.connect(new InetSocketAddress(addr, port));
        return Boolean.TRUE;
    }
    catch (Exception e) {
        return Boolean.FALSE;
    }
    finally {
        if (channel != null) {
            try { channel.close() } catch (Exception e) {}
        }
    }