我在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: 连接被拒绝
。如果错误发生得较早,则不必等待超时。超时实际上是针对完全没有响应的情况。发生错误后等待没有任何意义。
关于Java套接字超时不适用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27348698/