java - 在本地主机上抛出套接字异常,但不在网络上抛出?

标签 java sockets exception crash localhost

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

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

当我通过本地主机连接时,一切正常:一旦我关闭服务器,我就会在客户端收到异常。但是,一旦我通过本地网络连接并在另一台电脑上运行服务器,无论我终止进程还是插入服务器电脑的电缆,我都不会再遇到该异常。怎么可能?我还尝试使用一个线程来检查 socket.isClosed(),但这也不起作用。我做错了什么,为什么它通过本地主机工作!?

最佳答案

TCP 的工作原理是,当连接空闲时,各方之间的连接状态不会频繁同步。这是一个合乎逻辑的选择,因为同步纯粹是流量开销。当你突然中断沟通 channel 时,对方只是袖手旁观,以为什么都没发生。

另一方面,当您位于“localhost”时,这意味着您实际上位于环回适配器上,并且不需要通过线路进行同步。另一端立即收到 channel 故障通知。

关于java - 在本地主机上抛出套接字异常,但不在网络上抛出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25898486/

相关文章:

java - 无法解析 Eclipse 中的 Neo4j 注释

java - ActiveMQ 故障转移 : How to set the maximum reconnect delay

sockets - 在 Java ME 中使用套接字连接下载二进制文件

c# - 使用 TCP 套接字通过互联网发送/接收字节(可能使用静态 IP)

java - 从被调用的方法中捕获异常

java - 使用 Java 减少端连接 ArrayIndexOutOfBounds 异常

java - 线程 "main"java.rmi.ConnectException : Connection refused to host: 192. 168.1.55 中出现异常;嵌套异常是:

java - 在android项目中使用Kotlogram库

java - 在循环中添加事件处理程序

c++ - 多线程多套接字同时发送/接收