StreamReader.按顺序阅读课文

本文关键字:顺序 StreamReader | 更新日期: 2023-09-27 18:13:17

我正试图通过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);

发送的消息和字符数组的大小完全相同。'

编辑:在摆弄它之后,我意识到文本没有被打乱,但正确的文本是在前面的流后面。我如何确保流是清晰的或得到整个文本

StreamReader.按顺序阅读课文

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

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