私は、写真を撮り、その写真をデスクトップ コンピューターの受信機に無線で電波を介して転送するデバイスを開発しています。受信側では、C と fwrite() を使用して、データの分割パケットによって送信された画像ファイルを再構築しています。パケットを受信すると、次が実行されます。
fwrite(&data[3], size, 1, filename);
data[3] は、符号なし 8 ビット整数、データ型 u08 です。
有線ファイル転送が動作することを確認しました。送信機と受信機が直接接続されていれば問題ありません。
ただし、無線信号は、すべてのパケットが受信されることを保証するほど強力ではありません。私のテストでは、送信パケットの損失は一般的です。パケットが 1 つでも失われると、イメージ ファイルが破損します。受信率は約85%です。
すべてのパケットには番号が付けられています。受信したパケット数が予想されるパケット数よりも大きい場合、受信者はパケットがドロップされたことを認識します。
私の解決策は、期待されるパケット数カウンターをインクリメントしながら、欠落しているパケットをループしてデフォルトのパケットに置き換えることです。基本的に、失われたピクセルを黒いピクセルで埋め、受信したパケットを使用して可能な限り完全な画像を作成する予定です。これを行う方法がわかりません。受信したパケット番号と期待するパケット番号が一致しない場合、単純に data[3] を 0 に設定しようとしましたが、これは機能しませんでした。
他の提案された解決策を歓迎します。