我正在编写一个简单的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