0

我有一个应用程序通过套接字压缩和发送数据,并且接收到的数据被写入远程机器。在恢复期间,此数据将被解压缩并检索。压缩/解压是使用“zlib”完成的。但是在解压过程中我随机遇到以下问题:

对于 .xls、.qbw 等二进制文件,zlib inflate() 失败并出现错误“Z_DATA_ERROR”。

该应用程序以块为单位压缩数据,例如“1024”字节,并从文件中读取数据并以相同的方式解压缩。从论坛帖子中,我发现 Z_DATA_ERROR 的一个原因是数据损坏。到目前为止,为了避免这个问题,我们已经引入了在发送过程中压缩的数据和接收到的数据的 CRC 校验。非常感谢任何可能发生这种情况的原因!(因为这是随机发生的,并且对于同一个文件,它在其他时间也可以工作)。是因为不正确处理 zlib inflate() 和 deflate() 吗? 注意:如果需要,将发布确切的代码片段以供进一步分析!

谢谢...乌达

4

1 回答 1

0

您没有提到套​​接字是TCP还是UDP;但是基于阻塞和校验和,我会四处走动并猜测它是UDP。

如果您通过 UDP 发送压缩数据包,则它们可能会在另一端被乱序接收,或者数据包可能在传输过程中丢失。

正确处理诸如失序和丢失数据包之类的事情最终需要大量工作,这些工作都通过使用 TCP 协议来解决——您有一个简单的管道来保证数据按顺序和按预期到达。

此外,我会确保接收端的代码很简单,并且接收到分配在堆上而不是堆栈上的缓冲区中(我见过很多由此触发的错误)。

同样,这只是基于问题细节的有根据的猜测。

于 2012-06-03T11:26:58.403 回答