未检测到Java套接字已关闭

时间:2013-01-19 20:42:13

标签: java sockets

我写了一个小服务器/客户端应用程序。这是代码

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。 那我怎么能检测到连接已被破坏?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

发送保持活动段后,TCP将在未收到确认后重新发送,经过足够的确认后,TCP将向调用应用程序报告错误。

可以通过发送仅触发ACK的0长度消息来确认非活动连接的继续存在。这类似于某些平台上可用的操作系统级别保持活动功能,但可以调整到应用程序所需的频率。