2010-05-19 146 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

我結束了一個心跳包,需要從目標回答。基本上,我發送一個預定義的虛擬數據包,並且目標設備必須以相同的方式響應,否則連接將被視爲無效。