Java Socket.setSoTimeout() 连接不超时
Java Socket.setSoTimeout() doesn't timeout on connect
我有一个问题,我使用 setSoTimeout(500)
将连接超时设置为 0.5 秒并读取时间延迟,但它实际上没有工作,而是像往常一样在大约 10 秒后超时除了这种例外。是的,IP 在这种情况下是有效的。
java.net.ConnectException: Connection timed out: connect
这是代码:
try {
Socket sock = new Socket(ip, 42042);
sock.setSoTimeout(500);
BufferedInputStream is = new BufferedInputStream(sock.getInputStream());
theNames = theNames + is.read() + ";";
PrintWriter os = new PrintWriter(sock.getOutputStream());
} catch (IOException e) {
System.out.println(e + " | Le serveur a " + ip + " ne reponds pas.");
}
Socket.setSoTimeout
设置读取超时。它与连接超时无关。如果您想降低默认连接超时:
Socket sock = new Socket();
sock.connect(new InetSocketAddress(ip, 42042), timeout);
其中 timeout
以毫秒为单位。
注意:Javadoc 表示 'a timeout of zero is interpreted as an infinite timeout,' 但这是不正确的:它被解释为平台默认连接超时,大约一分钟。无限超时仅适用于读取。另请注意,您可以使用 connect()
来 减少 平台默认值,但不能 增加 它。
半秒对于连接超时或读取超时来说都太短了。
我有一个问题,我使用 setSoTimeout(500)
将连接超时设置为 0.5 秒并读取时间延迟,但它实际上没有工作,而是像往常一样在大约 10 秒后超时除了这种例外。是的,IP 在这种情况下是有效的。
java.net.ConnectException: Connection timed out: connect
这是代码:
try {
Socket sock = new Socket(ip, 42042);
sock.setSoTimeout(500);
BufferedInputStream is = new BufferedInputStream(sock.getInputStream());
theNames = theNames + is.read() + ";";
PrintWriter os = new PrintWriter(sock.getOutputStream());
} catch (IOException e) {
System.out.println(e + " | Le serveur a " + ip + " ne reponds pas.");
}
Socket.setSoTimeout
设置读取超时。它与连接超时无关。如果您想降低默认连接超时:
Socket sock = new Socket();
sock.connect(new InetSocketAddress(ip, 42042), timeout);
其中 timeout
以毫秒为单位。
注意:Javadoc 表示 'a timeout of zero is interpreted as an infinite timeout,' 但这是不正确的:它被解释为平台默认连接超时,大约一分钟。无限超时仅适用于读取。另请注意,您可以使用 connect()
来 减少 平台默认值,但不能 增加 它。
半秒对于连接超时或读取超时来说都太短了。