在localhost上抛出Socket Exception,但不是通过网络?

时间:2014-09-17 19:10:02

标签: java sockets exception crash localhost

我有一个客户端 - 服务器程序。这是客户端循环:

while ((msg = reader.readLine()) != null) {
                System.out.println(msg);
                //handle communication
            }
        } catch (Exception e) {
            e.printStackTrace();
            //handle server crash
        }

当我通过localhost连接时,一切正常:一旦我关闭了服务器,我就得到了客户端的异常。但是一旦我通过本地网络连接并在另一台PC上运行服务器,我就不会再得到那个例外了,如果我杀了进程也没有插上服务器电脑的电缆。怎么可能?我也尝试过一个检查socket.isClosed()的线程,但这也不起作用。我做错了什么,为什么它通过localhost工作!?

1 个答案:

答案 0 :(得分:1)

TCP工作使得当连接空闲时,各方之间的连接状态不经常同步。这是一个合理的选择,因为同步是纯粹的流量开销。当你突然打破通信渠道时,另一方只是闲着以为没有发生任何事情。

另一方面,当您使用" localhost"时,这意味着您实际上在环回适配器上,并且不需要通过线路进行同步。另一端会立即通知频道故障。