2015-06-15 63 views
2

我正在編寫tcp服務器和客戶端應用程序。服務器如何知道與客戶端的連接何時不可用,例如客戶端的計算機突然崩潰並且沒有發送FIN標誌?當NetworkStream關閉時已知

當我嘗試寫入網絡流時,它引發了一個異常,我想知道如何在不讀/寫流的情況下捕獲此異常,或者知道流是否關閉。

有幫助嗎?

+0

不可能。在閱讀/寫作時抓住例外是要走的路。 – Ralf

回答

0

您不能,無法檢查連接是否關閉而不會捕獲異常。

試圖在客戶端上寫/讀將拋出異常,這意味着連接已關閉。

+0

「會扔」不一定。起初它可能根本就什麼也不做。 – usr

0

TCP具有保持活動的時間間隔,其中保持活動的探測包用於檢查對方是否仍然活着。您需要檢查SO_KEEPALIVE套接字選項以獲取更多信息。 另一個更好的選擇是讓探測包定期在應用層發送。您可以將服務器端的TCP接收超時設置爲某個標稱值,例如1分鐘。從客戶端,您可以每分鐘發送一次虛擬請求。如果在此時間內沒有收到請求,則服務器recv將超時,並且假定客戶端連接丟失。

相關問題