如果我终止了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;
}
}
}
如何检测套接字服务器已经消失并终止循环?
答案 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
)。如果服务器可能需要很长时间的响应,那么这可能没有用作解决问题的方法,但在许多情况下仍然是一个好主意。