формат данных в связи между настольным приложением и приложением UWP

Я создаю службу клиент-сервер между настольным приложением (С#) и HoloLens (UWP). Сервер работает на HoloLens, а приложение для ПК является клиентом.

Я встречаю некоторые проблемы с передачей данных, и вот мой вопрос к вам.

Хотя сервер UWP использует Windows.Netowrking и Windows.Networking.Sockets, кажется, что он получает и отправляет данные в виде строк. Приложение для ПК использует System.Net и System.Net.Sockets, и перед отправкой строки требуется преобразовать строку в байтовый формат.

Может ли это быть проблемой? Я не смог найти много документации для Windows.Networking, и я не знаю, все равно ли данные перед отправкой преобразуются в байты.


person Kirchhoff1415    schedule 15.01.2019    source источник
comment
С чего вы взяли, что данные передаются в виде строк? Сокеты должны быть чисто бинарными. Любые недвоичные данные должны быть сериализованы в двоичные для передачи.   -  person glenebob    schedule 15.01.2019


Ответы (1)


Я не знаю, преобразуются ли данные перед отправкой в ​​байты в любом случае

Когда вы вызываете Write() или Send() с помощью сетевого API, вы обычно получаете возможность предоставить множество типов данных, будь то строка, byte[] или int, но это не влияет на то, как данные физически передано.

Внутри передача будет «сериализована» эффективным образом (как двоичный поток), но вам не нужно заботиться об этих деталях.

Потому что другой конец сможет обрабатывать эти данные как byte[], или int[], или строку.

Распространенная проблема, на которую вы, возможно, захотите обратить внимание, – это порядок байтов или проверка того, как вы меняете свою строку на byte[]. т.е. проблемы, когда вы неправильно переключаетесь между строками или разными байтами [] и т. д. Вы можете прочитать в System. Text.Encoding, чтобы убедиться, что вы правильно перемещаетесь между byte[] и строкой.

//Turn a string into a byte[], for your PC app to send
byte[] byteData = System.Text.Encoding.ASCII.GetBytes("Message");
//On the other end read that byte[] into ASCII characters
char[] charsData = System.Text.Encoding.ASCII.GetChars(byteData);
//Check you read something, and turn those chars into a string.
if (charsData != null && charsData.Length > 0)
    string stringData = new string(chars);
person Jethro    schedule 17.01.2019