我有一个while while循环,它从NetworkStream
对象 中读取一个缓冲区,while条件是networkStream.CanRead
,只要它能读取,它应该继续从缓冲区读取数据。唯一的问题是,当我从缓冲区读取并转换为字符串时,其中没有任何内容。即它是空的。NetworkStream.CanRead返回true,但缓冲区没有返回值
为什么会发生呢?
这是一个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);
}
}
请注意:它确实在第一次读取消息后,在同一网络流上发送另一个数据请求,这发生在第二次去 – soldieraman 2009-11-17 03:14:18
@soldieraman:如果darkassassin93的回答没有回答您的问题,请向我们展示您的代码。我有这样的感觉,你正在假设有关包边界和/或'Read'方法返回的字节数可能是错误的。 – dtb 2009-11-17 03:19:55
@dtb把一些代码信息 – soldieraman 2009-11-17 05:14:59