Подробности о приложении:
- Разработано в Visual Studio 2019 (Windows 10)
- Разработано на платформе UWP с C # и языком XAML
Приложение получает информацию с удаленного сервера. Соединение через сокет используется для связи между двумя сторонами.
Сервер отправил по кадрам сообщение, и в этом сообщении мы находим несколько существенных элементов, каждый из которых имеет размер и свое определение, как можно видеть ниже:
Содержание каждого сообщения:
- Name: ID Message / Type : UINT16 / Size : 4 bytes
- Name: ID Device/ Type : UINT8 / Size : 4 bytes
- Name: Temperature / Type : UINT16 / Size : 4 bytes
- Name: Activation / Type : BOOLEAN / Size : 4 bytes
- Name: Weather / Type : STRING[32] / Size : 16 bytes
Для восстановления данных, передаваемых через сокет, в приложении есть фоновая задача, которая занимается извлечением всей информации.
Вот мой код, который поэтому находится в фоновом режиме:
StreamReader reader;
int SizeBuffer = 2048;
int SizeReceive = 0;
reader = new StreamReader(socket.InputStream.AsStreamForRead());
string result;
result = "";
while (true)
{
char[] buffer = new char[SizeBuffer];
SizeReceive = await reader.ReadAsync(buffer, 0, SizeBuffer);
int i = 0;
Debug.WriteLine("Text 1 : ")
while (i < 2047)
{
Debug.WriteLine(buffer[i]);
i++;
}
string data = new string(buffer);
if (data.IndexOf("\0") >= 0 || reader.EndOfStream)
{
result = data.Substring(0, data.IndexOf("\0"));
break;
}
result += data;
}
Debug.WriteLine("Text 2 : " + result);
dataString = result;
Я использую два Debug.WriteLine
s, чтобы увидеть мои входящие данные.
Вот в чем проблема. Для сообщения Text1 я получаю такой символ: ������������������������
А для сообщения Text2 я получаю один символ: �
Как я могу полностью получить свое сообщение и сохранить его в каждом из перечисленных выше параметров в зависимости от его типа и соответствующего размера?