2010-01-12 218 views
1

我正在面對一個奇怪的套接字連接問題.net窗口應用程序。我使用來自.net的套接字異步地傳輸到舊系統緩存數據庫。

我在應用程序中有一個特定的超時值,當超時發生時,提示用戶保持連接到應用程序。當我說保持連接時,套接字未被重置。
我將超時設置爲30分鐘,並說保持連接第一個空閒時間。然後,當我瀏覽應用程序時,它工作正常。 如果無法在應用程序中導航並且說第二次保持連接狀態,並在應用程序中導航,則會出現套接字「主機拒絕」連接錯誤。我可以假設這可能是套接字被終止。

但是奇怪的部分是,如果我將應用程序超時設置爲10分鐘,那麼我也第二次收到套接字錯誤。當我檢查插座連接的屬性時,它仍然是正確的。當我調用套接字發送方法時,我不會捕獲異常。但數據不是從socket傳遞的。我檢查了其他.net代碼。沒事。這個問題很少發生,10次只有1次。任何建議都會非常有幫助。套接字連接錯誤

回答

2

這聽起來像是防火牆或其他TCP設置導致的典型問題。
如果連接閒置超過x秒,防火牆可能會靜默斷開連接。
由於在這種情況下TCP協議不會生成事件(類似於剛剛移除網絡電纜),強烈建議每隔x秒發送一次ping消息,以便防火牆保持打開狀態,並且您可以確保被連接。如果ping錯過,服務器會斷開客戶端連接。

+0

BUt我檢查了防火牆,它已關閉。是否有其他可能會影響的TCP設置 –

+0

Avid - 我不是在談論您的計算機上的防火牆 - 我正在談論公司網絡中的公司防火牆/交換機。如前所述,還有其他一些原因,您應該考慮使用ping協議 - 這是確保工作套接字簡單易行的最佳實踐。 – weismat