我正在編寫tcp服務器和客戶端應用程序。服務器如何知道與客戶端的連接何時不可用,例如客戶端的計算機突然崩潰並且沒有發送FIN標誌?當NetworkStream關閉時已知
當我嘗試寫入網絡流時,它引發了一個異常,我想知道如何在不讀/寫流的情況下捕獲此異常,或者知道流是否關閉。
有幫助嗎?
我正在編寫tcp服務器和客戶端應用程序。服務器如何知道與客戶端的連接何時不可用,例如客戶端的計算機突然崩潰並且沒有發送FIN標誌?當NetworkStream關閉時已知
當我嘗試寫入網絡流時,它引發了一個異常,我想知道如何在不讀/寫流的情況下捕獲此異常,或者知道流是否關閉。
有幫助嗎?
TCP具有保持活動的時間間隔,其中保持活動的探測包用於檢查對方是否仍然活着。您需要檢查SO_KEEPALIVE套接字選項以獲取更多信息。 另一個更好的選擇是讓探測包定期在應用層發送。您可以將服務器端的TCP接收超時設置爲某個標稱值,例如1分鐘。從客戶端,您可以每分鐘發送一次虛擬請求。如果在此時間內沒有收到請求,則服務器recv將超時,並且假定客戶端連接丟失。
不可能。在閱讀/寫作時抓住例外是要走的路。 – Ralf