Я пытаюсь отправить данные msgpack на сервер с C #, эти данные содержат нулевой символ в середине. из-за этого данные, полученные сервером, обрезаются с этим символом, и все, что после него теряется, что, конечно, делает невозможным распаковку данных msgpack.
Я попытался отправить данные с помощью WebClient.UploadData с данными поста, находящимися в именованном поле («field =» + data), а данные были просто байтами msgpack, оба случая имеют одну и ту же проблему.
Я также пытался с WebRequest, тот же результат.
Циклическое переключение байтов и замена нулевого символа на другой (FF) и его замена на веб-сервере работали, но это не жизнеспособное решение, слишком велика вероятность уничтожения данных.
Я также попытался запустить PHP-скрипт, отправляющий те же данные на сервер через curl, и я получаю полные данные, нулевой символ и все после него, успешно.
Поэтому мой вопрос заключается в том, существует ли способ отправить запрос с данными поста, содержащими двоичные данные, содержащие нулевой символ.
Кроме того, кодирование данных с помощью System.Web.HttpUtility.UrlEncode делает данные такими огромными, что полностью исключает любые преимущества использования msgpack.
Веб-сервер работает под управлением PHP 5.5, клиент работает из моно прямо сейчас, но должен будет работать в Unity.
Одним из возможных решений является следующее сопоставление при отправке данных:
00 -> FF F1
FF -> FF F2
Получив данные, вы сопоставляете два байта с исходным байтом. Вы эффективно избегаете нулевого байта.
Это быстрое и грязное решение, которое поможет вам сэкономить 2/255 байт в среднем (менее 1% накладных расходов)
Других решений пока нет …