Tôi có hai chức năng sau để gửi và nhận gói.boost :: asio :: buffer: Lấy kích thước bộ đệm và ngăn chặn tràn bộ đệm?
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";
}
Các yêu cầu liên quan đến phần này là boost::asio::buffer(reply, request_length)
trong đó độ dài yêu cầu là độ dài của chuỗi được thiết lập ban đầu khi gói được gửi. Làm cách nào để kiểm tra kích thước của bộ đệm mà không biết request_length
? Một câu hỏi khác là làm thế nào để ngăn chặn tràn bộ đệm?
Công cụ tuyệt vời. 'boost :: asio :: streambuff' với' boost :: asio :: read_until() 'làm việc tốt cho tôi trong trường hợp thư kết thúc bằng dấu phân cách. –