StreamReader.Read文本乱序

时间:2013-05-13 20:22:46

标签: c# streamreader networkstream

我正在尝试通过NetworkStream将屏幕截图的Base64字符串发送到服务器,看起来我收到了完整的字符串,问题是它是否已经混乱......

我认为这与碎片化并重新组合在一起有什么关系?什么是适当的方式...

客户代码

byte[] ImageBytes = Generics.Imaging.ImageToByte(Generics.Imaging.Get_ScreenShot_In_Bitmap());
string StreamData = "REMOTEDATA|***|" + Convert.ToBase64String(ImageBytes);
SW.WriteLine(StreamData);
SW.Flush();

服务器代码

char[] ByteData = new char[350208];
SR.Read(ByteData, 0, 350208);
string Data = new string(ByteData);
File.WriteAllText("C:\\RecievedText", Data);

发送的消息和char数组的大小完全相同。\

编辑: 在弄乱它之后我意识到文本没有被扰乱,但正确的文本正在跟踪前一个流..我如何确保流清晰或获取整个文本

1 个答案:

答案 0 :(得分:0)

您可能没有阅读之前的所有回复。您必须在循环中读取,直到您没有数据,如下所示:

char[] ByteData = new char[350208];
int totalChars = 0;
int charsRead;
while ((charsRead = SR.Read(ByteData, totalChars, ByteData.Length - totalChars) != 0)
{
    totalChars += charsRead;
}
string Data = new string(ByteData, 0, totalChars);
File.WriteAllText("C:\\RecievedText", Data);

这里的关键是StreamReader.Read读取最多您告诉它的最大字符数。如果没有那么多字符立即可用,它将读取可用的内容并返回它们。返回值告诉您它读取了多少。您必须继续阅读,直到获得所需的字符数,或者Read返回0