我写使用Boost ASIO的应用程序,其中客户端以及使用谷歌原缓冲区序列化的服务器交换消息。 我不知道什么是被发送的在网络上连载消息的大小。 看来,原BUF对象没有任何分隔符。
这里有.proto文件的内容。
package tutorial;
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
下面是我从服务器写入
tutorial::Person p;
p.set_name("abcd pqrs");
p.set_id(123456);
p.set_email("abcdpqrs@gmail.com");
write(p);
boost::asio::streambuf b;
std::ostream os(&b);
p.SerializeToOstream(&os);
boost::asio::async_write(socket_, b,
boost::bind(&Server::handle_write, this,
boost::asio::placeholders::error));
在客户端,我阅读了上面使用boost ::支持ASIO :: async_read发送的消息。 我如何找出的值arg
被设置成一个参数boost::asio::transfer_at_least
,在下面的代码?
boost::asio::async_read(socket_, response_,
boost::asio::transfer_at_least(arg),
boost::bind(&Client::handle_read_header, this,
boost::asio::placeholders::error));
要不然我怎么确保的boost ::阅读整个对象后async_read回报?