Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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.net.ConnectException:连接被拒绝超时_Java_Sockets - Fatal编程技术网

java.net.ConnectException:连接被拒绝超时

java.net.ConnectException:连接被拒绝超时,java,sockets,Java,Sockets,我看到了很多“java.net.ConnectException:拒绝连接”的问题,但没有一个是关于此错误超时的。我的问题是,在某些情况下,我必须连接到被阻止的服务器(由另一个软件连接到同一端口)。所以,我在做一个循环,最大重试次数尝试连接: 我当前的代码(当然,这取决于我的软件的许多配置,但工作正常): 问题是: 在Windows上,每秒都会抛出SocketException,而不是IOException,而我已将5000毫秒的超时配置为ivSocket.connect 在Linux上,这是

我看到了很多“java.net.ConnectException:拒绝连接”的问题,但没有一个是关于此错误超时的。我的问题是,在某些情况下,我必须连接到被阻止的服务器(由另一个软件连接到同一端口)。所以,我在做一个循环,最大重试次数尝试连接:

我当前的代码(当然,这取决于我的软件的许多配置,但工作正常):

问题是:

  • 在Windows上,每秒都会抛出SocketException,而不是IOException,而我已将5000毫秒的超时配置为
    ivSocket.connect
  • 在Linux上,这是每毫秒抛出一次
窗口:

2019-12-05 12:40:47609错误默认QuartzScheduler\u Worker-1 TCP连接器-连接拒绝承载本地主机端口13002。连接尝试编号1 java.net.ConnectException:连接被拒绝:连接 位于java.net.PlainSocketImpl.socketConnect(本机方法)

2019-12-05 12:40:48703错误默认QuartzScheduler\u Worker-1 TCP连接器-连接拒绝承载本地主机端口13002。第2次连接尝试 java.net.ConnectException:连接被拒绝:连接

Linux:

2019-12-05 12:45:47609错误默认QuartzScheduler\u Worker-1 TCP连接器-连接拒绝承载本地主机端口13002。连接尝试编号1 java.net.ConnectException:连接被拒绝:连接 位于java.net.PlainSocketImpl.socketConnect(本机方法)

2019-12-05 12:45:47610错误默认QuartzScheduler\U Worker-1 TCP连接器-连接拒绝承载本地主机端口13002。第2次连接尝试 java.net.ConnectException:连接被拒绝:连接

为什么不执行超时?这并不完全正确。如果在Windows上配置的超时小于1秒,则会执行超时。500毫秒:

2019-12-05 11:47:07375错误默认QuartzScheduler\u Worker-1 TCP连接器-连接到主机本地主机端口13002时发生I/O错误。连接尝试编号1 java.net.SocketTimeoutException:连接超时 位于java.net.PlainSocketImpl.socketConnect(本机方法)

2019-12-05 11:47:07875错误默认QuartzScheduler_Worker-1 TCP连接器-连接到主机本地主机端口13002时发生I/O错误。第2次连接尝试 java.net.SocketTimeoutException:连接超时 位于java.net.PlainSocketImpl.socketConnect(本机方法)


可以配置“连接拒绝”超时吗?

没有“连接拒绝超时”这样的事情

“连接被拒绝”发生在服务器看到连接请求,但没有服务侦听请求指向的IP+端口上的连接时。然后服务器“拒绝”连接。这通常会立即发生,因此不会触发超时

“连接超时”通常发生在连接请求无法到达服务器1、2时。因此,客户端将等待服务器的响应,然后重新发送/等待几次。最终,分配给建立连接的时间将过期。。。连接超时

正如您所看到的,这些是不同的场景。它们以不同的方式报告回Java客户端

因此,您没有超时的原因是“连接被拒绝”响应返回的速度足够快,不会超过您配置的超时

这也可以解释为什么将连接超时设置为较小可能会改变行为。操作系统允许Java设置的超时粒度也可能存在问题

为了进一步研究这个问题,我认为我们需要一个最小的可重复的例子。例如,我们需要了解您是如何实现管理服务器套接字并在服务器端接受连接的代码的


1-阻塞可能发生在服务器的回复数据包上。

2-这类事情有各种可能的原因。最有可能的情况是防火墙在某处阻止了通信、网络路由问题或在错误的网络上使用了专用IP地址。

没有“连接拒绝超时”这样的情况

“连接被拒绝”发生在服务器看到连接请求,但没有服务侦听请求指向的IP+端口上的连接时。然后服务器“拒绝”连接。这通常会立即发生,因此不会触发超时

“连接超时”通常发生在连接请求无法到达服务器1、2时。因此,客户端将等待服务器的响应,然后重新发送/等待几次。最终,分配给建立连接的时间将过期。。。连接超时

正如您所看到的,这些是不同的场景。它们以不同的方式报告回Java客户端

因此,您没有超时的原因是“连接被拒绝”响应返回的速度足够快,不会超过您配置的超时

这也可以解释为什么将连接超时设置为较小可能会改变行为。操作系统允许Java设置的超时粒度也可能存在问题

为了进一步研究这个问题,我认为我们需要一个最小的可重复的例子。例如,我们需要了解您是如何实现管理服务器套接字并在服务器端接受连接的代码的


1-阻塞可能发生在服务器的回复数据包上。

2-这类事情有各种可能的原因。最有可能的情况是防火墙在某处阻止了通信、网络路由问题或在错误的网络上使用了专用IP地址。

呃,对不起,我忘了将此标记为“已解决”(不知何故)。实际上,w
    public TCPConnector(TCPDefinition tcpDefinition) throws IAException {
    ivTcpDefinition = tcpDefinition;
     // Initialize the socket
    boolean retry = false;
    int counter = 1;
    do {
        try {
            ivSocket = new Socket();
            ivSocket.connect(new InetSocketAddress(tcpDefinition.getHostname(), tcpDefinition.getPort()), tcpDefinition.getConnectTimeOut());
            ivSocket.setSoTimeout(tcpDefinition.getAckTimeOut());
            retry = false;
        }
        catch (UnknownHostException uhe) {
            throw new IAException(null, new StringBuffer("Can't find host: ").append(tcpDefinition.getHostname()).toString(), uhe);
        }
        catch (SocketException see) {
            StringBuilder sb = new StringBuilder("Connection refused to host ").append(tcpDefinition.getHostname()).
            append(" port ").append(tcpDefinition.getPort()).append(". Connection Attempt Nr. ").append(counter);
            logger.error(sb.toString(), see);
            retry = true;
            if (counter++ > tcpDefinition.getConnectRetries())
                throw new IAException(null, sb.toString(), see);
            else
                logger.error("will retry to connect");
        }
        catch (IOException ioe) {
            StringBuilder sb = new StringBuilder("I/O error while connecting to host ").append(tcpDefinition.getHostname()).
            append(" port ").append(tcpDefinition.getPort()).append(". Connection Attempt Nr. ").append(counter);
            logger.error(sb.toString(), ioe);
            retry = true;
            if (counter++ > tcpDefinition.getConnectRetries())
                throw new IAException(null, sb.toString(), ioe);
            else
                logger.error("will retry to connect");
        }
    }
    while (retry);

}