Max*_* M. 1 java sockets timeout
我遇到一个问题,我曾经setSoTimeout(500)在连接和读取时间延迟上设置 0.5 秒的超时,但它实际上不起作用,而是在大约 10 秒后超时,就像通常处理这种异常一样。是的,IP 在这种情况下是有效的。
java.net.ConnectException: Connection timed out: connect
Run Code Online (Sandbox Code Playgroud)
这是代码:
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.");
}
Run Code Online (Sandbox Code Playgroud)
Socket.setSoTimeout设置读取超时。它与连接超时无关。如果您想降低默认连接超时:
Socket sock = new Socket();
sock.connect(new InetSocketAddress(ip, 42042), timeout);
Run Code Online (Sandbox Code Playgroud)
其中timeout以毫秒为单位。
注意:Javadoc说“超时为零被解释为无限超时”,但这并不正确:它被解释为平台默认连接超时,约为一分钟。无限超时仅适用于读取。另请注意,您可以使用connect()来减少平台默认值,但不能增加它。
半秒对于连接超时或读取超时来说都太短了。
| 归档时间: |
|
| 查看次数: |
2573 次 |
| 最近记录: |