【发布时间】:2016-02-16 21:15:17
【问题描述】:
我已经搜索过但没有解决我的问题。
我在本地主机上模拟 TCP 网络。服务器侦听端口,客户端连接到服务器。问题是当我通过客户端关闭套接字时,Socket.Connected 在服务器中仍然是 true。我需要知道客户端何时断开连接。
我想当我在客户端应用程序上调用Socket.Close 时,TCP FIN 数据包会发送到服务器,对吧?但好像没有。
你能给我一个解决方案吗?
附:我已经在关闭前调用了shutdown,但问题仍然存在。
【问题讨论】:
-
msdn.microsoft.com/en-us/library/wahsac9k%28v=vs.110%29.aspx 提到您应该在关闭之前调用 Shutdown()。
-
这就是为什么您经常会发现格式为
AreYouThere?-IAmHere的数据包的原因,这些数据包没有做其他工作来检查通信是否仍然存在。另一种检测断开连接的方法是发送/接收期间的超时或异常。 -
@Sinatr 该模式因 Heartbleed 漏洞而出名。但我认为这对于崩溃很重要,kill -9 或者,好吧,关闭而不刷新。
标签: c# .net sockets tcp .net-4.5