我正在編寫一個簡單的C#服務器和客戶端,但它不會在客戶端斷開連接時引發異常。它會繼續從客戶那裏讀取,認爲客戶仍然在那裏。當客戶不在時它也不再阻止。如果客戶端不再可用,我希望它會拋出異常。C#NetworkStream不會拋出異常
private TcpListener server;
private NetworkStream stream;
private TcpClient client;
private byte[] buffer = new byte[1];
server = new TcpListener (serverIp, _portNumber);
server.Start();
stream = client.GetStream();
//我想拋出異常的部分,當客戶端走了,但沒有。
try
{
stream.Read(buffer,0,1);
}
catch(Exception e)
{
#if (DEBUG)
Debug.Log ("Failed Rading " + e.Message);
#endif
return 0;
}
任何幫助,將不勝感激。
我應該什麼時候設置超時時間? – Programmer 2014-10-20 10:53:55
選擇假陽性和假陰性之間的良好折衷。取決於網絡以及您需要多快來檢測掉線連接。在大多數情況下,合理的值是[1,30]秒。另外,要明白,在所有情況下,沒有其他方式可以檢測到失敗的連接。超時是唯一可能的全面解決方案。 – usr 2014-10-20 11:15:28
你介意發佈一個代碼片段嗎? TcpClient和NetworkStream類都具有超時功能。我應該設置哪些? – Programmer 2014-10-20 11:42:29