私はパケットの送受信に以下の2つの機能を持っています。boost :: asio :: buffer:バッファサイズの取得とバッファオーバーフローの防止?
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
を知らずにバッファのサイズを確認するにはどうすればよいですか?別の問題は、バッファオーバーフローを防ぐ方法です。
素晴らしいもの。 'boost :: asio :: read_until()'を使った 'boost :: asio :: streambuff'は、メッセージがデリミタで終わる場合にはうまくいきました。 –