void send(std::string protocol)
{
char *request=new char[protocol.size()+1];
request[protocol.size()] = 0;
memcpy(request,protocol.c_str(),protocol.size());
request_length = std::strlen(request);
boost::asio::write(s, boost::asio::buffer(request, request_length));
}
void receive()
{
char reply[max_length];
size_t reply_length = boost::asio::read(s, boost::asio::buffer(reply, request_length));
std::cout << "Reply is: ";
std::cout.write(reply, reply_length);
std::cout << "\n";
}
这些问题涉及到这部分的内容:
boost::asio::buffer(reply, request_length)
。这里的 request_length 是在发送数据包时设置的字符串长度。如果不知道 request_length,如何检查缓冲区的大小?另外一个问题是如何防止缓冲区溢出?
boost::asio::streambuff
与boost::asio::read_until()
对我非常有效。 - Matt Munson