NetworkStream.CanRead 返回 true 但缓冲区不返回任何值

sol*_*man 3 .net c# ip tcp networkstream

我有一个 do while 循环,它从对象读取缓冲区,而NetworkStreamwhile 条件是networkStream.CanRead只要它可以读取,它就应该继续从缓冲区读取。唯一的问题是,当我从缓冲区读取并转换为字符串时,其中没有任何内容。即它是空的。

为什么会发生这种情况?

这是一个 ASP.NET(VS2005) 应用程序

@dtb代码信息:

我正在传递一个NetworkStream对象networkStream

// between 2 functions in a loop
{
    SendMessage(networkStream, message);

    ReadMessage(networkStream);
}
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果它重新连接并再次连接,发送/读取工作正常。NetworkStream这实际上是发送(我在这里没有遇到异常)或对象重用的问题吗?这在测试 TCP 服务器上本地工作正常,但在生产中(Windows Server 2003)时我遇到了上述问题(即无法从流中读取任何内容 - 直到我实际超时(退出循环)之后) 10秒)

ReadMessage(networkStream)
{
    if (networkStream != null && networkStream.CanRead)
    {
        byte[] myReadBuffer = new byte[1024];
        StringBuilder myCompleteMessage = new StringBuilder();

        do
        {
            int numberOfBytesRead = networkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
            string messageRead = Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead);
            myCompleteMessage.Append(messageRead);
        } while (networkStream.CanRead);
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

CanRead是一个静态值,指示流是否能够读取。该DataAvailable属性会让您知道数据是否已准备好读取。