現在、リモート ベンダーにデータを転送するコードを書いています。転送は TCP ソケットを介して行われます。私が抱えている問題は、データが可変長であり、フレーミングやサイズ マーカーがないことです。データの送信は問題ありませんが、返されたデータを処理する最善の方法がわかりません。
データは個別の「メッセージ」で構成されていますが、サイズは固定されていません。各メッセージには、このメッセージに含まれるコンポーネントを示す 8 または 16 バイトのビットマップがあります。一部のコンポーネントは固定長で、一部は可変長です。各可変長コンポーネントには、メッセージ全体のその部分のサイズ プレフィックスがあります。
最初にソケットを開くと、メッセージが送信され、それぞれが応答を受け取るはずです。データの読み取りを開始するときは、メッセージの先頭にいる必要があります。どのメッセージ フィールドが含まれているかを知るには、ビットマップを解釈する必要があります。データが到着したら、ビットマップで示される各フィールドが存在し、正しいサイズであることを検証する必要があります。
最初のメッセージをすべて読んだら、次のメッセージが始まります。私の懸念は、送信がメッセージの途中で切断された場合、どのように回復して次のメッセージの開始を正しく見つけることができるかということです。
接続障害をシミュレートする必要があり、コードはそのメッセージをキャンセルする前に、設定された回数だけ自動的に再試行する必要があります。
リモート エンドのコードを制御できず、フレーミング バイトやサイズ プレフィックスをメッセージに追加できません。
ベスト プラクティス、設計パターン、またはこれを処理するための最善の方法に関するアイデアはすべて歓迎されます。