为什么NetworkStream.DataAvailable总是如此?

时间:2011-03-06 12:30:48

标签: c# tcp network-programming

我打开TcpClient然后调用tcpClient.GetStream().Read(message, 0, 8)以便从连接中读取消息。

由于某种原因,即使连接的另一端没有发送任何数据,我仍然会收到垃圾数据。 Read()永远不会阻止,DataAvailable总是true,而且我会收集大量垃圾作为数据。

可能是什么原因?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果没有看到管道的两端(但特别是发送结束),这很难回答。 DataAvailable只能真正指示本地缓冲区的状态(不是流本身);在确定流的结束方面,它基本上是无用的(报告不相关的东西)。

期待这是传输代码中的错误。这里的经典错误如下:

var buffer = memoryStream.GetBuffer();
networkStream.Write(buffer, 0, buffer.Length);

应该是:

var buffer = memoryStream.GetBuffer();
networkStream.Write(buffer, 0,
    (int)memoryStream.Length);

第一个(和不正确的)版本发送内存流的后备缓冲区的垃圾部分。