我有一个简单的.net程序集,它连接到服务器并返回打开的Stream,可用于读写。重要的是应该是Stream而不是NetworkStream,所以我没有那里的DataAvailable方法。
现在我想在控制台应用程序中使用这个简单的程序集与服务器通信:通过Stream对象发送消息和接收答案。
这就是问题所在:当读取下面的套接字代码时,因为Stream.Read()将一直等待输入而永远不会返回0。 this主题中描述了此行为。
public static byte[] ReadFully (Stream stream)
{
byte[] buffer = new byte[32768];
using (MemoryStream ms = new MemoryStream())
{
while (true)
{
int read = stream.Read (buffer, 0, buffer.Length);
if (read <= 0)
return ms.ToArray();
ms.Write (buffer, 0, read);
}
}
}
此代码来自this article
我也不能set ReadTimeout,因为我只能访问Stream对象。
那么什么可能是一个解决方案?如何读取整个缓冲区并确定何时停止?
我刚刚在Stream.Read()之前使用了超时,但超时并不好。
PS。我使用.net核心1.1作为目标框架,所以一些需要.net框架的解决方案对我不起作用。