boost::asio::ip::tcp::socket
クライアント/サーバーアプリケーションでデータを送受信するために使用しています。私は、パケットのサイズといくつかのフラグと「実際の」データを含むヘッダーで構成される単純な自作のデータ パケットを使用します。を使用してパケットを送信しboost::asio::write
ます。場合によっては、1 つのクライアントに送信するパケットが多数あります。単純な最速のオプションは、それらを一度に送信することです。例えば
async_write(socket, buffer(p[0].str(),p[0].size()), &callback);
async_write(socket, buffer(p[1].str(),p[1].size()), &callback);
async_write(socket, buffer(p[2].str(),p[2].size()), &callback);
しかし、このようにした場合、パケットがクライアントに完全に到着するという保証はありますか? この例では、パケットの最初の 4 バイトが残りのパケットのサイズを表している場合、4 回呼び出すことができますか?
uint32 size;
read(socket, buffer(&size,4));
char data[size];
read(socket, buffer(data,size));
それぞれに1つのパケットが含まれていることを確認してdata
ください(サイズuint32とは別に)?または、コールバック関数で次のパケットを送信すると機能しますか?
この事実が機能する場合、もう1つの質問は順序に関するものです。パケットがクライアントに到着する順序が、サーバーから送信した順序と同じであることを確認できますか?