私は、C++でアプリケーション間のネットワーク接続を維持するライブラリを構築しています。いくつかのデバッグ中に私はソケットから取得するいくつかの情報が不完全であることがわかりました。プロトコルバッファのライブラリでデコードすれば、完全なメッセージが必要なので、この情報は完全であることが不可欠です。tcp/ipは完全なメッセージを伝えますか?
現象は一定ではありません。ときには、ソケットからすべてのデータを取得することもあります。テストの手順は、サーバーの起動、クライアントの複数回の起動のようになります。私が得るものは、関数から出力され、いくつかの変数の値がどのように変化するかを表しています。それらの1つは、データを格納するために使用するバッファのサイズです。そのサイズは、バッファ内のデータ量を示します。クライアントは、この特定のテストでサイズ3(バイト)のメッセージをそれぞれ2回送信します。私は、バッファサイズが3の倍数になることを期待しています。しかし、時々サイズは4です!これは、プログラムが1つの完全なメッセージと2つ目のメッセージの1/3を読み込むことを意味します。なぜ私はいつも最初のメッセージを完成させるのか分からない。それ以外の場合、protobufはプログラムを終了します。
私はtcp/ipは私が完全なメッセージを得るように気を付けるべきだと思った。私の問題は、サイズをあらかじめ知っていないことです。私は完全なメッセージを受け取って、それを中核と解釈することができると期待しています。