C#NetworkStream不会抛出异常
本文关键字:抛出异常 C#NetworkStream | 更新日期: 2023-09-27 18:27:04
我正在编写一个简单的C#服务器和客户端,但当客户端断开连接时,它不会引发异常。它将继续从客户那里阅读,认为客户仍然在那里。当客户端离开时,它也不再阻塞。如果客户端不再可用,我希望它抛出一个异常。
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;
}
如有任何帮助,我们将不胜感激。
如果客户端在没有通知服务器的情况下离开,那么除了超时之外,您什么都不能做。服务器无法发现客户端已不在的事实。
你需要接受这个事实。设置超时。
当连接关闭并且缓冲区中没有更多数据可读取时,它应该抛出异常。显然还有可用的数据。当缓冲区和连接关闭时,应该会得到一个异常。我还看到你一次读取1个字节的数据。为什么不先检查连接是否处于活动状态:
client.Client.Poll(0, SelectMode.SelectRead)
检查是否有数据可供读取,并读取正确的数量:
int available = client.Client.Available;
if(available > 0)
{
var buffer = new byte[available];
client.Read(buffer, 0, available);
}