我写了一个小服务器/客户端应用程序。这是代码
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对象时应该有一个异常,但没有异常。我在线。服务器上没有数据到达。我也在客户端上使用Wiresharked。 Keep-Alive数据包是发送的,但是从来没有任何TCP ACK Paket,所以Java应该检测到出现了问题。当连接完全建立后,在keep-Alive Paket之后就有一个TCP ACK Paket。 那我怎么能检测到连接已被破坏?
感谢您的帮助。
答案 0 :(得分:0)
发送保持活动段后,TCP将在未收到确认后重新发送,经过足够的确认后,TCP将向调用应用程序报告错误。
可以通过发送仅触发ACK的0长度消息来确认非活动连接的继续存在。这类似于某些平台上可用的操作系统级别保持活动功能,但可以调整到应用程序所需的频率。