私のプロジェクトには、一方向のみでしか話せないSender/Receiverフレームワークが含まれています。受信者から送信者へのリターンチャネルはありません。 送信者は、zlibを使用して受信者に送信するデータの一部を圧縮します。zlibストリームを再構築する
私の受信機をクラッシュ/再起動/再起動に復元したいのですが、何とかランダムな点からzlibストリームに参加できますか?
Z_SYNC_FLUSHを使用する送信者/受信者。
私が持っていたいくつかのアイデア:
- がディスクに状態の構造を保存し、受信機の再起動後にそれらをリロードします。
- Z_SYNC_FLUSHをZ_FULL_FLUSHに置き換えます。
私はzlib圧縮データの最初のチャンクを保存してみましたが、受信機を再起動して、最初のチャンクを再送信してからランダムなチャンクからストリームを続けると、それは固い解決策ですか、それとも単なる運でしたか?
Z_FULL_FLUSHに置き換えても差がないようです。
これを回避する別の方法がありますか?私は何かを逃したと思いますか?
どうもありがとう、
ジェイソン
送信者が単方向リンクを介して受信者に接続されているため、受信者が再起動して新鮮なストリームが必要であることを送信者が知ることができないため、 Z_FULL_FLUSHを再試行しましたが、「間違ったヘッダーチェック」でZ_DATA_ERRORが発生しました。InflateSync()を呼び出した後にInflateSync()を呼び出そうとしましたが、InflateSync()はZ_OKを返します。 – Eldad
送信側を制御できない場合は、ストリームの途中で再起動する方法がありません。 'Z_FULL_FLUSH'は' inflate() 'ではなく、' deflate() 'のみを意味します。 –
Mark、 私が説明したシナリオの説明がありますか?私の質問では可能ですか?私はストリームの最初のチャンク(deflate()の最初の出力)を取り出し、再起動した後に受信側に送信し、ストリームからランダムなチャンクを選んで受信側にも送信します。 ランダムチャンクが正常に膨張しましたが、どうすれば可能ですか?私が間違っていない場合、inflate関数は、この場合失われている以前のデータからシーケンスを探しています。 – Eldad