代码之家  ›  专栏  ›  技术社区  ›  anio

Java套接字服务器,客户端检测服务器已经死亡

  •  3
  • anio  · 技术社区  · 16 年前

    如果我终止了socket服务器进程,我的socket客户机进程将不会收到任何错误,它将继续在以下代码上永远循环:

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

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

    2 回复  |  直到 11 年前
        1
  •  4
  •   erickson    16 年前

    终止 外面的 当调用 readLine() 收益率 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();
      }
    }
    
        2
  •  0
  •   oxbow_lakes    16 年前

    而答案来自 埃里克森 是正确的,您是否尝试设置 socket read time-out properties ?(例如) sun.net.client.defaultReadTimeout )。如果服务器可能需要很长时间的响应,那么作为解决问题的解决方案,这可能不太有用,但在许多情况下也是一个好主意。