gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:37:57 27 4
gpt4 key购买 nike

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

为什么会这样?

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

@dtb 代码信息:

我正在传递 NetworkStream 对象 networkStream

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

ReadMessage(networkStream);
}

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

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);
}
}

最佳答案

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

关于c# - NetworkStream.CanRead 返回 true 但缓冲区不返回任何值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1746342/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com