0
我的項目包含一個發送方/接收方框架,只能單向交談,沒有從接收方到發送方的返回信道。 發送方使用zlib壓縮發送給接收方的部分數據。重建zlib流
我想使我的接收器對崩潰/重新啓動/重新啓動有彈性,是否有可能以某種方式從一個隨機點加入zlib流?
發送方/接收方都使用Z_SYNC_FLUSH。
一些想法我有:
- 保存狀態結構到磁盤和接收器重新啓動後重新載入。
- 將Z_SYNC_FLUSH替換爲Z_FULL_FLUSH。
我試圖保存的zlib壓縮數據的第一塊,重啓接收器,比一次後重新發送第一個塊從隨機塊不斷流,它似乎工作 - 我不明白爲什麼,這是一個堅實的解決方案還是隻是一個運氣?
替換爲Z_FULL_FLUSH似乎沒有任何區別。
是否有其他解決方法?你覺得我錯過了什麼嗎?
非常感謝,
傑森
我不能要求發送方結束流並開始新流,因爲發送方通過單向鏈路連接到接收方,發送方無法知道接收方重新啓動並需要新流。我試着在從Inflate(),InflateSync()返回Z_OK但Inflate()返回相同的錯誤後得到Z_DATA_ERROR,然後調用InflateSync()來調用InflateSync()。 – Eldad
如果您不控制發送端,則無法在流中間重新啓動。 'Z_FULL_FLUSH'只對'deflate()'有意義,而不是'inflate()'。 –
謝謝馬克, 你有解釋我的問題描述如何在我的問題是可能的?我將流的第一部分(deflate()的第一個輸出)重新發送到接收器,然後從流中選取一個隨機塊並將其發送給接收器。 隨機塊膨脹成功,它怎麼可能?如果我沒有錯,膨脹函數正在尋找在這種情況下丟失的先前數據的序列。 – Eldad