下面的代码从 tcp 客户端流中读取所有要读取的内容,并且在下一次迭代中,它将只停留在 Read() 上(我假设正在等待数据)。我如何确保它不会在没有任何内容可读时返回?我是否必须设置低超时,并在失败时响应异常?或者有更好的方法吗?
TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect(ip, port);
Stream stm = tcpclnt.GetStream();
stm.Write(cmdBuffer, 0, cmdBuffer.Length);
byte[] response = new Byte[2048];
MemoryStream ms = new MemoryStream();
byte[] buffer = new Byte[2048];
int length;
while ((length = stm.Read(buffer, 0, buffer.Length)) > 0)
ms.Write(buffer, 0, length);
byte[] response = ms.ToArray();
tcpclnt.Close();
最佳答案
TcpClient 有两个我会玩的属性。
- NoDelay 获取或设置一个值,该值在发送或接收缓冲区未满时禁用延迟。
- ReceiveTimeout 获取或设置 TcpClient 在启动读取操作后等待接收数据的时间
关于c# - 确保 streamreader 不会挂起等待数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835549/