我在网上搜索了我的问题的解决方案,但到目前为止没有任何结果。
我用Silverlight应用程序,SocketServer和SocketClient(带有Silverlight应用程序)进行了测试。
在 Debug模式下,两个应用程序都运行,当我关闭浏览器窗口时,我很高兴看到服务器上触发了一个事件,并且套接字连接自动关闭。
大谜团开始了。那到底是怎么回事?
按下电源按钮关闭客户端计算机该怎么办?
我的事件是否仍会触发,或者我会因为许多未关闭的Socket连接而在服务器上出现堆栈溢出?
最佳答案
在服务器上,您实际上应该在轮询套接字连接,以查看它们是否仍然有效。发送“您还活着”消息。
通常,一旦套接字连接丢失,通过套接字向下发送数据将导致其掉落,并发生异常。
不幸的是,计算机通常无法检测到套接字是否丢失了链接,除非您尝试对其进行操作。它唯一知道的是客户端(或服务器)何时发送“关闭连接”命令(通常在.NET中通过Socket.Close()方法完成)。
套接字是那样的痛苦。
关于silverlight - 防止许多未关闭的Silverlight套接字连接出现堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1476957/