Java Socket.setSoTimeout()在连接时没有超时

时间:2015-03-16 23:28:46

标签: java sockets timeout

我遇到一个问题,我使用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.");
}

1 个答案:

答案 0 :(得分:4)

Socket.setSoTimeout设置读取超时。它与连接超时无关。如果要降低默认连接超时:

Socket sock = new Socket();
sock.connect(new InetSocketAddress(ip, 42042), timeout);

其中timeout以毫秒为单位。

注意:Javadoc表示超时为零被解释为无限超时,'但这不正确:它被解释为平台默认连接超时,大约一分钟。无限超时仅适用于读取。另请注意,您可以使用connect() 减少平台默认值,但不能增加

对于连接超时或读取超时,半秒太短了。