【问题标题】:Why reading my tcp inputstream lead a byte array fill in with null character only?为什么读取我的 tcp 输入流会导致字节数组仅填充空字符?
【发布时间】:2011-03-02 05:11:18
【问题描述】:

我不习惯 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 数据包是否仍在网络上? inputStream 在行为错误之前是否有限制?

更新: 顺便说一句,这样做会导致同样的问题:

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

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

实际上,toto 文件恰好停在我在我的代码的第一个版本中遇到问题的地方,虽然它有点长,因为该行的其余部分随后被 NULL 字符填充,几乎高达 400 000!

【问题讨论】:

  • 如果申请不是你的,那你为什么写'我的申请' ;-)

标签: c# tcp inputstream


【解决方案1】:

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

尝试嗅探与 ethereal 的通信。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2018-08-21
    • 2021-12-17
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多