2

当我的客户端应用程序关闭套接字甚至终止时,我的服务器仍然认为它还活着。我什至检查了 TcpClient.Connected然后我看到了这个。我加粗了重要的部分

如果客户端套接字在最近一次操作时连接到远程资源,则为 true ;否则为假。

我怎么知道套接字是否关闭?目前我必须做一个操作并得到一个异常来发现它是打开还是关闭

4

1 回答 1

1

有很多事情可以破坏套接字上的通信,其中许多完全超出您的控制范围,最好保持简单。

目前,您拥有一个完全可以接受的检测机制,非常简单且成本低。

您可以进行心跳,每隔 X 次从客户端发送一条“我在这里”消息,然后让服务器运行并查看是否没有针对 X * 小提琴因子间隔的消息。虽然使用处理器时间和带宽。

另一种选择取决于您的客户端检测到它不再连接并请求新连接。如果您在 request 中有一个唯一标识符,您可以为它运行现有的连接,如果它在那里,则将其杀死,然后开始然后正常继续。

我知道异常感觉不对,但是如果您不断失去连接,这才是真正的问题,如果您是这样的话,您的努力会更好地解决这个问题。

于 2012-08-24T23:06:07.687 回答