2015-12-26 37 views
0

我想知道TcpClientNetworkStream如果發生超時到底發生了什麼。如果沒有收到數據流tcpclient關閉連接

在調試我發現的代碼,經過請求被髮送,並且如果沒有數據被提及的超時週期內接收到它拋出異常下面,不幸的是關閉連接(TcpClient.Connected成爲假):

無法讀取數據從傳輸連接:連接 嘗試失敗,因爲連接方在一段時間後沒有正確響應 ,或者由於連接的主機未能響應,建立的連接失敗。

它引發異常是好的,但我想知道我可以如何防止它關閉連接。

如果有人能提供更多的見解,這將是非常好的。

+0

通常情況下,服務器的設計方式會在客戶端停止一段時間後強制關閉連接。這允許更有效地利用服務器資源。但是,我想,看看你的信息,那不是你的情況。看起來你不能連接到你的服務器。請發佈MCVE(http://stackoverflow.com/help/mcve)。 – Dennis

+0

如果連接從未完成,則無法保持打開狀態。所以我假設超時發生在初始連接之後。如果服務器關閉連接,則無法阻止連接關閉。通常,服務器在閒置時會關閉連接。在這種情況下,您使用KeepAlive選項,該選項定期向服務器發送一個空數據文件,以便服務器不關閉連接。 – jdweng

+0

該異常意味着您的連接呼叫失敗。這與閱讀無關。尚未建立連接。郵政編碼。由於缺少代碼而暫時關閉。 Undiagnosable。 – usr

回答

1

你檢查了這一個嗎? Reconnect TCPClient after interruption我想如果你有足夠長的TCP連接TTL,如果發生異常(我相信你會拋出一個SocketException),你可以捕獲它並啓動你的重試邏輯。有幾種實現方式,顯然這取決於用例,但通常在「放棄」連接之前會有多次嘗試(配置值)。這樣,您的經理將重新嘗試連接X次,如果連接成功,將繼續進行,否則會在鏈中傳播異常。