gpt4 book ai didi

c# - WebSocket permessage-deflate C#

转载 作者:太空狗 更新时间:2023-10-30 01:35:23 25 4
gpt4 key购买 nike

我已经用 C# 编写了一个 WebSocket,并且正在尝试实现 permessage-deflate 扩展。似乎 C# DeflateStream 无法解压缩从 Chrome(版本 36.0.1985.143 m)发送的消息有效负载——这是我迄今为止唯一尝试过的。尝试解压缩时,我收到“ block 长度与其补码不匹配”消息。不是RFC 1950、RFC 1951 2 byte header的问题。

我在 C# 中使用 DeflateStream 来压缩相同的数据(字符串“Hello”),试图查看压缩数据的差异。奇怪的是,压缩的 Chrome 有效负载和 C# 压缩数据除了第一个字节外完全相同! Chrome 负载的第一个字节总是比第一个字节少 1,即使将示例压缩字符串从 'hello' 更改为其他任何内容也是如此。我可以简单地将 1 添加到第一个字节,然后有效载荷解压缩。

我找到了一个 Compression Extensions for WebSocket讨论此问题但未解决 C# 问题的草案。

第 8.2.3.1 节使用“Hello”示例字符串并显示正确的压缩负载:0xf2 0x48 0xcd 0xc9 0xc9 0x07 0x00

第 8.2.3.4 节继续讨论使用 Deflate block 并将 BFINAL 设置为 1,它会产生:0xf3 0x48 0xcd 0xc9 0xc9 0x07 0x00 0x00

0xf3 数据是 C# DeflateStream 毫无问题地压缩和解压缩的数据。好像算法中有一个涉及BFINAL的deflation选项,而C#没有提供这个设置?

我希望有人可能熟悉这个问题或知道如何解决这个问题。如果可能,我不希望链接到第 3 方库。

谢谢。

最佳答案

它使用的是 PPP 协议(protocol),它在传输之前从 deflate 流的末尾丢弃 0x00 0x00 0xff 0xff。在将其提供给解压缩器之前,只需附加这四个字节即可。

关于c# - WebSocket permessage-deflate C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26051786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com