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

时间:2009-11-17 03:10:55

标签: c# .net tcp ip networkstream

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

为什么会这样?

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

@dtb代码信息:

我正在传递一个NetworkStream对象networkStream

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

    ReadMessage(networkStream);
}

有趣的是,如果它重新连接并再次连接,发送/读取工作正常。它实际上是Send(我在这里没有例外)或重用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);
    }
}

1 个答案:

答案 0 :(得分:4)

CanRead是一个静态值,用于指示流是否能够被读取。 DataAvailable属性会告诉您数据是否可以读取。