WebSocket-permessage-deflate C#

WebSocket-permessage-deflate C#,c#,websocket,compression,deflate,C#,Websocket,Compression,Deflate,我用C#编写了一个WebSocket,并试图实现permessagedeflate扩展。似乎C#deflatestStream无法解压缩从Chrome(版本36.0.1985.143 m)发送的消息有效负载,这是我迄今为止唯一尝试过的。我在尝试解压缩时收到“块长度与其补码不匹配”消息。这不是RFC1950,RFC1951的2字节头问题 我在C#中使用了DeflateStream来压缩相同的数据(字符串“Hello”),试图查看压缩数据中的差异。奇怪的是,除了第一个字节外,压缩的Chrome负载和

我用C#编写了一个WebSocket,并试图实现permessagedeflate扩展。似乎C#deflatestStream无法解压缩从Chrome(版本36.0.1985.143 m)发送的消息有效负载,这是我迄今为止唯一尝试过的。我在尝试解压缩时收到“块长度与其补码不匹配”消息。这不是RFC1950,RFC1951的2字节头问题

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

我发现一份草案讨论了这个问题,但没有解决C#的问题

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

然后,第8.2.3.4节继续讨论使用最终设置为1的放气块,其产生: 0xf3 0x48 0xcd 0xc9 0xc9 0x07 0x00 0x00

0xf3数据是C#deflatestStream无问题压缩和解压缩的数据。似乎算法中有一个通缩选项涉及BFINAL,而C#不提供此设置

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


谢谢。

它使用的是PPP协议,该协议在传输之前从放气流的末尾删除
0x00 0x00 0xff 0xff
。在将这四个字节输入到解压器之前,只需将其追加即可。

我开发了一个

首先,您不能压缩完整连接,因为
DeflateStream
如何缓冲数据。您可以压缩消息。换句话说,它不支持上下文接管,您必须在HTTP协商中指出这一点

此外,当您完成对
DeflateStream
的刷新后,必须向流中写入一个字节
0
。请检查我的电话号码

在中,您可以找到以下示例: