我现在正试图使用boost-asio的socket API从客户端向服务器传输一些JSON数据。我的客户端基本上是这样做的:
int from = 1, to = 2;
boost::asio::streambuf buf;
ostream str(&buf);
str << "{"
<< "\"purpose\" : \"request\"" << "," << endl
<< "\"from\" : " << from << "," << endl
<< "\"to\" : " << to << "," << endl
<< "}" << endl;
// Start an asynchronous operation to send the message.
boost::asio::async_write(socket_, buf,
boost::bind(&client::handle_write, this, _1));
在服务器端,我可以选择使用各种
boost::asio::async_read*
函数。我想使用JsonCpp来解析接收到的数据。通过学习JsonCpp API (http://jsoncpp.sourceforge.net/class_json_1_1_reader.html),我发现Reader是在std::string
, char*数组或std::istream
之上操作的,而这些我可以从传递给这些函数的boost::asio::streambuf
中操作。关键是据我所知,并不一定会一次性传输整个内容,因此我需要某种确认,以确保缓冲区包含足够的数据来使用JsonCpp处理整个文档。如何确保缓冲区包含足够的数据?
else
永远不会被触发! - John