【发布时间】: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