Java套接字超时不适用

时间:2014-12-07 22:35:41

标签: java sockets timeout

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

        try {
            socket = new Socket();
            socket.connect(new InetSocketAddress(ip, port), 5000);

        } catch (SocketException e2) {
            System.out.println("Something wrong with the socket: " + e2);
        }

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

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

2 个答案:

答案 0 :(得分:3)

连接超时是connect()将阻止的最大时间。如果立即拒绝连接或其他错误,您将立即得到它。在这种情况下,目标端口没有收听,因此您可以立即获得ConnectException: connection refused。如果错误发生得更快,则没有义务等待超时。超时确实适用于根本没有响应的地方。 错误后等待没有任何意义。

答案 1 :(得分:0)

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

//这限制了建立连接所允许的时间

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

socket.connect(新的InetSocketAddress(主机,端口),超时);

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

Socket的(超时);