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

我苦苦挣扎的一件事是如何检测断开连接。我可以想到2种方法:

  • 保持 Activity 。我知道可以在Sockets级别完成此操作,但是我不确定如何在异步模型中执行此操作。 Socket类如何让我知道断开连接。
  • 手动保持 Activity 。基本上,我让Silverlight应用程序每20秒左右发送一个虚拟数据包。如果失败,我将假定断开连接。但是,令人难以置信的是,即使我只是拔下与Silverlight应用程序连接的设备,SocketAsyncEventArgs.SocketError总是报告成功。我不确定这是bug还是升级到SL4。

  • 任何想法,方向或实现方式将不胜感激。

    最佳答案

    我最终得到了一个心跳数据包,该数据包需要目标提供答案。基本上,我发送了一个预定义的虚拟数据包,并且目标设备必须对此做出响应,否则,该连接将被视为无效。

    关于c# - 如何检测套接字断开?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2867735/

    10-11 21:25