如何检测Socket断开?

时间:2010-05-19 17:04:18

标签: c# sockets visual-studio-2010 silverlight-3.0 disconnection

我在Silverlight 3中使用异步套接字模式实现了一项任务。我从Michael Schwarz's implementation开始,并在此基础上构建。基本上,我的Silverlight应用程序建立了与设备的持久套接字连接,然后数据在设备和Silverlight应用程序之间根据需要双向流动。

我正在努力解决的一件事是如何检测断线。我可以想到两种方法:

  1. 保持活动。我知道这可以在套接字级别完成,但我不知道如何在异步模型中执行此操作。 Socket课程如何让我知道已经断开连接。

  2. 手动保持活着。基本上,我让Silverlight应用程序每隔20秒左右发送一个虚拟数据包。如果失败,我会假设断开连接。但是,令人难以置信的是,即使我只是拔掉Silverlight应用程序所连接的设备,SocketAsyncEventArgs.SocketError也会报告成功。我不确定这是一个错误,还是我需要升级到SL4。

  3. 任何想法,方向或实施都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

我最终选择了需要目标答案的心跳包。基本上,我发送一个预定义的虚拟数据包,目标设备必须以相同的方式响应,否则连接被视为无效。