有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

未检测到Javasocket已关闭

我已经编写了一个小型服务器/客户端应用程序。这是密码

try 
{
   OutputStream os = clientSocket.getOutputStream();
   ObjectOutputStream oos = new ObjectOutputStream(os);   
   System.out.println("clientsocketstatus connected: " + clientSocket.isConnected());
   System.out.println("clientsocketstatus closed: " + clientSocket.isClosed());
   oos.writeObject(keepAliveNW); 
} 
   catch(Exception e) 
{ 
   e.printstacktrace(); 
}

现在,当我在Windows中禁用NIC并重新启用netstat时,我的PC1和PC2之间没有打开的连接。 现在,当我的客户机尝试发送keepAliveNW对象时,应该存在异常,但没有异常。我窃听了。服务器上没有数据。我还对客户进行了窃听。Keep-Alive数据包是发送的,但是从来没有任何TCP-ACK-Paket,所以Java应该检测出有什么地方出错了。当连接完全建立时,在保持活动的数据包之后会有一个TCP ACK数据包。 那么,我如何检测到连接已断开

谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    发送keep alive段后,TCP将在未收到任何确认后重新传输,并且在收到足够的确认后,将向调用应用程序报告错误

    通过发送仅触发ACK的0长度消息,可以确认非活动连接的持续存在。这类似于某些平台上提供的操作系统级保持活动功能,但可以根据应用程序要求的频率进行调整