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

Mak*_*kky 2 java sockets timeout servlets

我有一个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));
    }
Run Code Online (Sandbox Code Playgroud)

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

有人可以帮助为什么会这样吗?

Ale*_*øld 6

SO_TIMEOUT(由socket.setSoTimeout设置)仅影响socket.getInputStream().read().要指定连接超时,请为socket.connect指定第二个参数:

socket.connect(new InetSocketAddress(ip, Constant.PORT), 1000);
Run Code Online (Sandbox Code Playgroud)