c# - 确保 streamreader 不会挂起等待数据

标签 c# .net stream tcpclient

下面的代码从 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 有两个我会玩的属性。

  1. NoDelay 获取或设置一个值,该值在发送或接收缓冲区未满时禁用延迟。
  2. ReceiveTimeout 获取或设置 TcpClient 在启动读取操作后等待接收数据的时间

关于c# - 确保 streamreader 不会挂起等待数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835549/

相关文章:

java套接字/输出流写入: do they block?

c++ - 运算符 << 重载 C++

c# - ASP.NET mvc4 DropDownListFor 传回一个对象

c# 字符串日期格式从 d.M.yyyy 到 yyyy-MM-dd

c# - 当没有当前项时,如何禁用绑定(bind)到当前项的 ICommand 的按钮?

c# - 无法解析对程序集 'PostSharp' 的依赖性,因为它尚未预加载

c# - 将 Prism 与 Ninject 结合使用

Node.js 流式传输 gzip http 响应

c# - ASP.NET 自定义控件 - 未知的服务器标记

c# - 检查 crm 2013 c# 中 regardingobjectid 字段的类型