簡単な質問がいくつかあります。クライアントサーバーアプリケーションとデータがネットワーク上で送信されています。
データを回復して適切に処理できるようにしたいと思います。
struct T1
{
int id;
int foo;
};
struct T2
{
int id;
char foo;
int bar;
};
これらの構造を見てみましょう。これらは、T1またはT2のいずれかが続くかどうかを示すintが前に付いたネットワーク上で送信されます。クライアントが私にT1を送信し、次にT2を送信した場合、asio :: ip :: tcp :: socket.async_read()を使用して完全な構造を読み取ることができるという保証がありますか?単一の構造体を処理するハンドラーを設定したいのですが、単一のasync_read()ですべてを読み取ることができない場合はどうなりますか?
非同期操作は、次のいずれかの条件が満たされるまで続行されます。
- 提供されたバッファがいっぱいです。つまり、転送されるバイト数は、バッファサイズの合計に等しくなります。
- エラーが発生しました。
読み取れないデータは破棄されますか?別のasync_readをトリガーしますか?そして、クライアントがID +構造を順番に送信した場合、async_readは1つのID +構造のみを取得することが保証されていますか?それとも、OSが物事を最適化し、両方を同じパケに入れることができますか?お気づきかもしれませんが、私は少し混乱しています。サーバー/クライアントアプリケーションを設計するときに正しい決定を下したいと思います。助けていただければ幸いです。
ありがとうございました。