我正在尝试通过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数组的大小完全相同。\
编辑: 在弄乱它之后我意识到文本没有被扰乱,但正确的文本正在跟踪前一个流..我如何确保流清晰或获取整个文本
答案 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
。