2016-01-21 4 views
0

Я хочу отправить строки JSON взад и вперед по соединению сокета в C# (xamarin).Как получить строку JSON из сокета

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

Должен ли я отправить длину сначала в двоичном формате (возможно, на один или два байта), а затем на строку JSON? Каков стандартный способ сделать это, чтобы получатель знал, сколько байтов считывается из сокета каждый раз, когда он получает полную строку JSON.

Он должен знать, сколько байтов на строку, потому что каждая строка представляет собой отдельный пакет, и если многие пакеты отправляются обратно назад, если длина каждой строки неизвестна точно, она будет считываться за конец одного string и в начале другого, или не читайте всю строку, так или иначе она будет разбиваться при декодировании искаженной строки.

Другая проблема, если я отправляю длину сначала в двоичном формате, тогда, если что-то должно произойти, когда получатель не синхронизируется с отправителем, тогда он не знает, какой байт является длиной больше, потому что он не может указать, где начинаются строки , и какие входящие данные представляют длину, он просто получит кучу байтов, и он не будет знать, где начало, откуда заканчивается и т. д.

Любой знает, как правильно это сделать, не записывая мегабайт кода ?

Благодаря

ответ

0

Если это сообщение основано строка (как вы упомянули JSON), вы можете использовать StringBuilder для CONCAT каждый пакет вы получили, и проверить на каждом получить шаг для Конец файла тега (который определен вами, например <EOF>).

Вот пример на MSDN

Client и Server реализаций: Клиент отправляет сообщения, заканчивающиеся <EOF> тегов и сервер проверяет для того, чтобы убедиться, каждое сообщение будет завершено.

Смежные вопросы