java socket服务器,客户端检测服务器已经死亡

时间:2009-07-20 22:31:18

标签: java sockets

如果我终止了Socket Server进程,我的Socket客户端进程没有收到任何错误,它将继续循环使用以下代码:

public void run() {
    while(readData) {
      String inputLine = null;
      try {
        while((inputLine = m_inputStream.readLine()) != null) {
          //do stuff
        }
      } catch (IOException e) {
         readData = false;
     }
  }
}

如何检测套接字服务器已经消失并终止循环?

2 个答案:

答案 0 :(得分:4)

当对readLine()的调用返回null时,终止外部循环。

当服务器正常关闭连接时,不会抛出异常。流应返回null以表示数据结束。

这可以通过这样的循环完成:

public void run() {
  try {
    while (true) {
      String line = input.readLine();
      if (line == null)
        break;
      /* Process line. */
      ...
    }
  } catch (IOException ex) {
    /* Handle the exception as desired. */
    ex.printStackTrace();
  }
}

答案 1 :(得分:0)

虽然 erickson 的答案是正确的,但您是否尝试过设置socket read time-out properties? (例如sun.net.client.defaultReadTimeout)。如果服务器可能需要很长时间的响应,那么这可能没有用作解决问题的方法,但在许多情况下仍然是一个好主意。