2012-02-28 45 views
0

我有一個用C#編寫的異步套接字服務器。通常,我的用戶會抱怨說他們沒有任何理由就會斷開連接。用戶計算機上的其他互聯網應用程序(MSN,SKYPE等)似乎連接良好,因此它們的互聯網連接似乎不成問題。任何人都可以提供一些關於如何在客戶端和服務器之間建立連接的信息(我的意思是防止頻繁斷開連接),或者我可以在哪裏查找斷開連接問題?套接字連接穩定性

+0

請不要用「C#」等來標題。這就是標籤的用途。 – 2012-02-28 05:01:15

+1

我很抱歉,但您希望我們怎麼辦?你的問題太籠統了。我們如何猜測所有可能的斷開連接的變量?你能向我們提供你的代碼嗎?斷開連接後重新連接怎麼樣? – Jason 2012-02-28 05:04:15

+0

你有特別的協議嗎?它是否有某種ping/keep-alive機制?你的服務器可以處理請求的速度嗎? – 2012-02-28 07:29:08

回答

0

我假設你在這裏談論TCP。您的應用程序的客戶端使用的套接字庫與他們用於連接到Skype或MSN的套接字庫幾乎相同。通常,斷開連接的原因是一方關閉了套接字(例如連接空閒一段時間後)。檢查代碼中關閉連接的位置。

2

網絡地址轉換器(又名「家庭路由器」,「無線網關」等)在多臺計算機中共享一個ISP分配的IP地址可能正在播放。 NAT保留一張活動連接表(有時稱爲「端口映射表」),用於跟蹤如何爲活動TCP連接和觀察到的UDP會話翻譯ip:port對。如果某些品牌的路由器在一段時間內未觀察到任何通過TCP連接的流量,則已知可清除端口映射內存不足的品牌。像MSN Messenger和Skype這樣的應用程序通過週期性地在客戶端,服務器和其他持久連接之間發送「保持活躍」來緩解這種情況。這些消息是雙向的。

你沒有提供太多的信息繼續下去,所以NAT問題只是一個可能性。

診斷連接失敗的最佳方法是大量投入記錄網絡消息(客戶端和服務器上),套接字事件以及套接字API的所有返回值。這樣,如果客戶報告問題,他可以將您的日誌發送給您 - 並希望您可以獲取相應的服務器日誌以供比較。然後,您可以診斷斷開連接的起始位置和/或哪個套接字錯誤重置連接。觸發斷開連接的代碼有很大可能性。