zlib 膨胀错误:随机Z_DATA_ERROR



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

zlib inflate() 失败,错误"Z_DATA_ERROR"对于二进制文件,如 .xls,.qbw 等。

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

谢谢。。。乌海

你没有提到套接字是TCP还是UDP;但是基于阻塞和校验和,我冒昧地猜测它是UDP。

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

正确处理诸如不序和丢失数据包之类的事情最终会成为使用 TCP 协议修复的大量工作 - 您有一个简单的管道来保证数据按顺序和按预期到达。

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

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

最新更新