套接字超时在Servlet中不起作用

时间:2013-06-03 12:52:29

标签: java sockets servlets timeout

我有一个Java servlet尝试连接到源(使用请求IP地址)。

方法如下:

String ip = request.getRemoteAddr();

private void connect(String ip) throws SocketException, IOException {
        Socket socket = new Socket();
        socket.setSoTimeout(1000);
        socket.connect(new InetSocketAddress(ip, Constant.PORT));
    }

现在,如果它没有连接一秒,它应该抛出异常,但它不会在一秒内抛出异常,但需要10-15秒的时间。

有人可以帮助解决这个问题的原因吗?

1 个答案:

答案 0 :(得分:6)

SO_TIMEOUT(由socket.setSoTimeout设置)仅影响socket.getInputStream()。read()。要指定连接超时,specify a second parameter to socket.connect

socket.connect(new InetSocketAddress(ip, Constant.PORT), 1000);