2010-05-19 149 views
2

我已经在Silverlight 3中使用异步套接字模式实现了一项任务。我开始使用Michael Schwarz's implementation并构建于此之上。所以基本上,我的Silverlight应用程序与设备建立持久的套接字连接,然后在设备和Silverlight应用程序之间根据需要双向传输数据。如何检测套接字断开?

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

  1. Keep-Alive。我知道这可以在套接字级完成,但我不知道如何在异步模型中完成此操作。 Socket类如何让我知道已经断开连接。

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

任何想法,方向或实施将不胜感激。

+0

你可以调查你的插座吗? http://stackoverflow.com/questions/722240/instantly-detect-client-disconnection-from-server-socket – sbenderli 2010-07-02 13:56:20

+0

@sbenderli方法不可用Silverlight – AngryHacker 2010-07-02 20:45:02

+0

如何尝试发送一个空数据包并捕获套接字错误每过一段时间?有点像手动投票? – sbenderli 2010-07-03 16:28:18

回答

0

我结束了一个心跳包,需要从目标回答。基本上,我发送一个预定义的虚拟数据包,并且目标设备必须以相同的方式响应,否则连接将被视为无效。