我不习惯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!
答案 0 :(得分:1)
唯一合理的想法是你确实在传入的数据中有零。
尝试嗅探与ethereal的沟通。
顺便说一句:为每个接收到的数据分配RAM可能是错误的做法。