Java 套接字超时不适用



我在java中有这个使用超时的套接字实现:

        try {
            socket = new Socket();
            socket.connect(new InetSocketAddress(ip, port), 5000);
        } catch (SocketException e2) {
            System.out.println("Something wrong with the socket: " + e2);
        }

IP 和端口已关闭,因此无法建立连接。但是这里的超时不起作用。它不会等待 5 秒,然后返回错误。

此代码位于构造函数中,并从可运行的类调用。 这可能是原因吗?

连接超时是connect()将阻止的最长时间。如果立即出现连接拒绝或其他错误,您将立即收到它。在这种情况下,目标端口没有侦听,因此您会立即获得ConnectException: connection refused。 如果错误发生得更快,则不必等待超时。超时实际上是在根本没有响应的情况下。在错误等待没有任何意义。

套接字套接字 = 新套接字();

这限制了建立连接的时间

如果在指定的超时内未收到连接结果,则会发生超时。

socket.connect(new InetSocketAddress(host, port), timeout);

这将停止在连接成功后等待响应的请求。

socket.setSoTimeout(timeout);

相关内容

  • 没有找到相关文章

最新更新