Отправить двоичные данные POST с C #, содержащий нулевой символ

Я пытаюсь отправить данные msgpack на сервер с C #, эти данные содержат нулевой символ в середине. из-за этого данные, полученные сервером, обрезаются с этим символом, и все, что после него теряется, что, конечно, делает невозможным распаковку данных msgpack.

Я попытался отправить данные с помощью WebClient.UploadData с данными поста, находящимися в именованном поле («field =» + data), а данные были просто байтами msgpack, оба случая имеют одну и ту же проблему.
Я также пытался с WebRequest, тот же результат.

Циклическое переключение байтов и замена нулевого символа на другой (FF) и его замена на веб-сервере работали, но это не жизнеспособное решение, слишком велика вероятность уничтожения данных.
Я также попытался запустить PHP-скрипт, отправляющий те же данные на сервер через curl, и я получаю полные данные, нулевой символ и все после него, успешно.

Поэтому мой вопрос заключается в том, существует ли способ отправить запрос с данными поста, содержащими двоичные данные, содержащие нулевой символ.

Кроме того, кодирование данных с помощью System.Web.HttpUtility.UrlEncode делает данные такими огромными, что полностью исключает любые преимущества использования msgpack.

Веб-сервер работает под управлением PHP 5.5, клиент работает из моно прямо сейчас, но должен будет работать в Unity.

0

Решение

Одним из возможных решений является следующее сопоставление при отправке данных:

00 -> FF F1
FF -> FF F2

Получив данные, вы сопоставляете два байта с исходным байтом. Вы эффективно избегаете нулевого байта.

Это быстрое и грязное решение, которое поможет вам сэкономить 2/255 байт в среднем (менее 1% накладных расходов)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]