当连接已在使用时,Java获取nio SocketChannel连接

时间:2017-11-02 09:56:59

标签: java sockets nio

如果PC上的其他应用程序连接到同一远程IP地址,则Java应用程序将无法正常连接。

如果exits abruptly没有关闭套接字通道,也会发生这种情况。可以阻止连接,并且在后续会话期间无法连接。

我可以做些什么来确保无论底层操作系统中的连接状态如何,我的程序都会100%连接?

我正在寻找跨平台解决方案(Windows& Ubuntu)

public void connect() throws CommunicationIOException {

    try {

        if (isConnected()) {
            return;
        }

        socket = SocketChannel.open();
        socket.socket().connect(new InetSocketAddress(getHostname(), getPort()), getConnectionTimeout());

        if (!isConnected()) {
            throw new CommunicationIOException("Failed to establish the connection");
        }

        socket.configureBlocking(false);

    } catch (final IOException ex) {

        throw new CommunicationIOException(
                "An error occurred while connecting to " + getHostname() + " on port " + getPort(), ex);
    }

}

public boolean isConnected() {
    if (socket == null) {
        return false;
    } else {
        return socket.isConnected();
    }
}

public void close() throws CommunicationIOException {

    if (socket != null) {

        try {

            socket.close();

        } catch (final IOException ex) {

            throw new CommunicationIOException(
                    MessageFormat.format(
                            "An error occurred while attempting to close the connection to {}:{}",
                            getHostname(), getPort()), ex);
        }

    }
}

1 个答案:

答案 0 :(得分:0)

  

如果PC上的其他应用程序连接到同一远程IP地址,则Java应用程序将无法正常连接。

不,它不会,除非服务器编程不正确。

  

如果在不关闭套接字通道的情况下突然退出,也会发生这种情况。

不,它不能,除非有不正确的程序。

  

可以阻止连接

不,不能。

  

并且在后续会话期间无法连接。

不,不是。

  

我可以做些什么来确保无论底层操作系统中的连接状态如何,我的程序都会100%连接?

这一生中没有任何东西会给你100%的保证。然而,你上面表达的恐惧毫无根据。