为什么读取我的tcp输入流导致一个字节数组只用空字符填充?

时间:2010-06-10 14:30:06

标签: c# tcp inputstream

我不习惯C#(我经常做C ++)并尝试调试一个不属于我的应用程序。

我的应用程序尝试从TCP套接字读取一个大行。让我们说大约140 000个字符。它失败了。让我解释一下。

我的代码在这里(实际上在循环内)

            System.IO.Stream inputStream;

            //...

            // Loop code:
            buffer            = new byte[2];
            readByteForLength = inputStream.Read(buffer, 0, 2);

事实证明,Read()可以正确地填充缓冲区数组,直到一个点,它用NULL字符而不是有效值填充它。并且它在正确的情况下返回2。

你知道为什么会出现这样的NULL字符吗?

当我尝试阅读更多数据时,tcp pacquet是否还在网络上? inputStream在行为错误之前是否有限制?

更新 顺便这样做导致了同样的问题:

        System.IO.StreamReader sr = new StreamReader(inputStream);
        string s = sr.ReadToEnd();

        File.WriteAllText(@"c:\temp\toto.txt", s);

实际上toto文件正好停在我在我的代码的第一个版本中遇到问题的地方,而它稍长一点,因为该行的其余部分随后填充了NULL字符,接近400 000!

1 个答案:

答案 0 :(得分:1)

唯一合理的想法是你确实在传入的数据中有零。

尝试嗅探与ethereal的沟通。

顺便说一句:为每个接收到的数据分配RAM可能是错误的做法。