使用包含空字符的c#发送二进制POST数据

时间:2015-02-25 06:16:27

标签: c# php msgpack

我试图将msgpack数据发送到带有C#的服务器,这个数据在中间包含一个空字符。因此,服务器收到的数据会被这个字符切断,然后丢失任何内容,这当然会导致msgpack数据无法解压缩。

我尝试使用WebClient.UploadData发送数据,其中post数据位于命名字段中(" field =" + data),数据只是msgpack字节,两种情况都有同样的问题。 我也尝试过WebRequest,结果相同。

循环遍历字节并将空字符更改为另一个字符(FF)并将其更改回Web服务器上,但这不是一个可行的解决方案,它很可能会破坏数据。 我还试过运行一个PHP脚本,通过curl将相同的数据发送到服务器,然后我成功获得完整数据,空字符及其后的所有内容。

所以我的问题是,有没有办法发送包含包含空字符的二进制数据的帖子数据的请求。

此外,使用System.Web.HttpUtility.UrlEncode对数据进行编码会使数据变得如此庞大,以至于它首先完全消除了使用msgpack的任何优势。

Web服务器运行的是PHP 5.5,客户端现在从mono运行,但必须在Unity中运行。

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案是在发送数据时进行以下映射:

00 -> FF F1
FF -> FF F2

接收数据后,将两个字节映射回原始字节。您实际上是在逃避空字节。

这是一个快速而肮脏的解决方案,平均成本为2/255额外字节(开销低于1%)