私は単純なサーバークライアントアプリケーションを持っています。C++ asio socket read答えサーバー
idia: クライアントがsql-requestを使用してサーバー文字列に送信します。 サーバーは要求を処理し、csv形式の文字列でデータが整形されたクライアント応答を返します。
すべてが既に調整されています。問題は、私が受け取った文字列のサイズを知らないので、クライアントの答えを読むことです。
コード怒鳴るです:
サーバー:
std::string answer;
answer = sql_read(*msg); //get the string with data from request
clientSock->write_some(buffer(answer, answer.size())); //send it back on client
はクライアント:
std::string answer;
bytesRead = sock->read_some(boost::asio::buffer(readBuf, inputSize)); //read the answer, but how do I know correct size of string?
string_ptr msg(new std::string(readBuf, bytesRead));
answer = *msg;
そのサイズを知らなくても、結果の文字列を読み込むための方法は? または、私のaproach(文字列でデータを送信する)が根本的に正しい方法でそれを行う方法が間違っていますか?
ヒント: 'clientSock-> write_some()'はすべてのデータを書き込んでいない可能性があります。戻り値をチェックしてループで呼び出す必要があります。 Asioにはこの不都合を回避するヘルパー機能があります。例:boost :: asio :: write(sock、boost :: asio :: buffer(answer)); '。 –