我有一个通过套接字压缩和发送数据的应用程序,接收的数据写在远程机器上。在恢复期间,将对此数据进行解压缩和检索。压缩/解压缩使用“zlib”完成。但在解压缩过程中,我会随机面对以下问题:
zlib inflate()因二进制文件(如.xls,.qbw等)的错误“Z_DATA_ERROR”而失败。
应用程序压缩块中的数据,在循环中说“1024”字节,从文件读取数据并以相同方式解压缩。从论坛帖子中,我发现Z_DATA_ERROR的一个原因是由于数据损坏。截至目前,为了避免这个问题,我们引入了在发送期间压缩的数据的CRC校验和接收的内容。 发生这种情况的任何可能原因都非常感谢! (因为这是随机发生的,对于同一个文件,它可以在其他时间工作)。是不是zlib inflate()和deflate()的错误处理? 注意:如果需要,会发布确切的代码段以供进一步分析!
...谢谢Udhai
答案 0 :(得分:0)
您没有提到套接字是TCP还是UDP;但是基于阻塞和校验和,我正在走出困境并猜测它是UDP。
如果您通过UDP发送压缩数据包,则可能在另一端无序接收,或者数据包可能在传输过程中丢失。
通过使用TCP协议来解决排序错误和丢失数据包之类的问题最终导致很多工作无法解决 - 您有一个简单的管道可以保证数据按顺序到达并按预期进行
此外,我还要确保接收端的代码很简单,并且接收到堆上分配的缓冲区而不是堆栈上的缓冲区(我看到很多由此触发的错误)。
同样,这只是基于问题细节的有根据的猜测。