【发布时间】:2012-08-25 07:06:07
【问题描述】:
当我的客户端应用程序关闭套接字甚至终止时,我的服务器仍然认为它还活着。我什至检查了TcpClient.Connected 然后我看到了这个。我把重要的部分加粗了
如果客户端套接字连接到远程资源最近一次操作,则为真;否则为假。
我如何知道套接字是否关闭?目前我必须做一个操作并得到一个异常来发现它是打开还是关闭
【问题讨论】:
当我的客户端应用程序关闭套接字甚至终止时,我的服务器仍然认为它还活着。我什至检查了TcpClient.Connected 然后我看到了这个。我把重要的部分加粗了
如果客户端套接字连接到远程资源最近一次操作,则为真;否则为假。
我如何知道套接字是否关闭?目前我必须做一个操作并得到一个异常来发现它是打开还是关闭
【问题讨论】:
有很多事情可以破坏通过套接字的通信,其中许多完全超出您的控制范围,最好保持简单。
目前你有一个完全可以接受的检测机制,非常简单且成本低。
您可以进行心跳,每隔 X 次从客户端发送一条“我在这里”消息,然后让服务器运行并查看 X * 小提琴因子间隔是否没有消息。但是会使用处理器时间和带宽。
另一个选项取决于您的客户端检测到它不再连接并请求新连接。如果您在请求中有唯一标识符,您可以为它运行现有的连接,将其杀死(如果存在),然后正常启动然后继续。
我知道异常感觉不对,但只有在你不断失去连接时才会真正成为问题,如果你是这样的话,你的努力会更好地解决这个问题。
【讨论】: