C 和php通信,C#与PHP通信压缩

试了很久,没有成功,终于找到了这个解决方案。谢天谢地

C#客户端访问PHP SOAP WebService,当传输大量文本数据时,可以通过压缩减少网络传输。C#在System.IO.Compression命名空间下提供了两个类GZipStream 类和DeflateStream类来进行数据的压缩和解压缩。经本人实验,在C#下使用GZipStream压缩的字符串在PHP下使用gzuncompress函数无法解压缩,有人说可以使用gzdecode解开,但本人的PHP不支持gzdecode函数,但有gzencode函数(why?原因未明,据说是PHP的BUG,可能到PHP6才提供此函数)。

C#下使用DeflateStream类压缩文本后,可以在PHP下用gzinflate解压缩。示例代码如下:

客户端C#(在头4个字节增加了原文本的长度,方便在C#中解压缩,对于在PHP端解压缩这个没有用处):

[c-sharp]

public static string Compress(string text)

{

byte[] buffer = Encoding.UTF8.GetBytes(text);

MemoryStream ms = new MemoryStream();

using (DeflateStream zip = new DeflateStream(ms, CompressionMode.Compress, true))

{

zip.Write(buffer, 0, buffer.Length);

}

ms.Position = 0;

MemoryStream outStream = new MemoryStream();

byte[] compressed = new byte[ms.Length];

ms.Read(compressed, 0, compressed.Length);

byte[] gzBuffer = new byte[compressed.Length + 4];

System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);

System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);

return Convert.ToBase64String(gzBuffer);

}

PHP端

function Decompress($strSource)

{

$strTemp = base64_decode($strSource);

$strTemp = substr($strTemp, 4);

return gzinflate($strTemp);

}

支持中文,编码为UTF8.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值