C#从Stream.Read()读取套接字

时间:2017-04-28 11:36:16

标签: c# sockets stream

我有一个简单的.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框架的解决方案对我不起作用。

0 个答案:

没有答案
相关问题