2012-06-03 26 views
0

我有一個應用程序通過套接字壓縮和發送數據,並且接收到的數據寫入遠程機器。在恢復過程中,這些數據將被解壓縮並檢索。zlib充氣錯誤:Z_DATA_ERROR隨機

zlib的膨脹()失敗,錯誤「Z_DATA_ERROR」爲像的.xls,.qbw等

二進制文件:壓縮/解壓縮使用「ZLIB」。但是解壓縮期間我面對隨機以下問題做

應用程序壓縮數據塊中的數據稱爲「1024」字節,循環中的數據從文件中讀取並以相同的方式解壓縮。從論壇帖子中,我發現Z_DATA_ERROR的一個原因是由於數據損壞。到目前爲止,爲了避免這個問題,我們引入了對發送期間壓縮的數據和接收到的數據進行CRC校驗。 爲什麼會發生這種情況的任何可能的原因真的很感激! (因爲這是隨機發生的,並且對於同一個文件,它會在其他時間運行)。它是否正確處理zlib inflate()和deflate()? 注意:如果需要,將張貼準確的代碼片段以供進一步分析!

謝謝... Udhai

回答

0

你沒有提到如果套接字是TCP或UDP;但是基於阻塞和校驗和,我會走出去,猜測它是UDP。

如果您通過UDP發送壓縮數據包,則可能會在另一端無序接收它們,或者數據包在傳輸過程中可能會丟失。

讓順序和丟失數據包等事情最終成爲大量使用TCP協議修復的工作 - 您有一個簡單的管道,可以確保數據按順序到達,預期。

另外我會確保接收端的代碼很簡單,並接收到堆中分配的緩衝區而不是堆棧中(我見過很多由此觸發的錯誤)。

再一次,這只是一個基於問題細節的有根據的猜測。