我有一个客户端 - 服务器程序。这是客户端循环:
while ((msg = reader.readLine()) != null) {
System.out.println(msg);
//handle communication
}
} catch (Exception e) {
e.printStackTrace();
//handle server crash
}
当我通过localhost连接时,一切正常:一旦我关闭了服务器,我就得到了客户端的异常。但是一旦我通过本地网络连接并在另一台PC上运行服务器,我就不会再得到那个例外了,如果我杀了进程也没有插上服务器电脑的电缆。怎么可能?我也尝试过一个检查socket.isClosed()的线程,但这也不起作用。我做错了什么,为什么它通过localhost工作!?
答案 0 :(得分:1)
TCP工作使得当连接空闲时,各方之间的连接状态不经常同步。这是一个合理的选择,因为同步是纯粹的流量开销。当你突然打破通信渠道时,另一方只是闲着以为没有发生任何事情。
另一方面,当您使用" localhost"时,这意味着您实际上在环回适配器上,并且不需要通过线路进行同步。另一端会立即通知频道故障。