मेरे पास एक सर्वर है जो क्लाइंट से एक संपीड़ित स्ट्रिंग (zlib के साथ संपीड़ित) प्राप्त करता है, और मैं इस स्ट्रिंग को प्राप्त करने के लिए boost::asio
लाइब्रेरी से async_receive
का उपयोग कर रहा था, हालांकि यह पता चला है कि इस बात की कोई गारंटी नहीं है कि सभी बाइट प्राप्त किए जाएंगे, इसलिए अब मुझे इसे async_read
में बदलना होगा। मुझे जिस समस्या का सामना करना पड़ता है वह यह है कि प्राप्त बाइट्स का आकार परिवर्तनीय है, इसलिए मुझे यकीन नहीं है कि async_read
का उपयोग बिना बाइट्स की संख्या को जानने के लिए कैसे किया जाए। async_receive
के साथ मेरे पास सिर्फ boost::array<char, 1024>
है, हालांकि यह एक बफर है जो पूरी तरह से भरा नहीं है।boost :: asio async_read गारंटी सभी बाइट्स पढ़े जाते हैं
मुझे आश्चर्य हुआ कि कोई भी समाधान का सुझाव दे सकता है जहां मैं async_read का उपयोग कर सकता हूं, भले ही मुझे पहले से प्राप्त बाइट्स की संख्या पता न हो?
void tcp_connection::start(boost::shared_ptr<ResolverQueueHandler> queue_handler)
{
if (!_queue_handler.get())
_queue_handler = queue_handler;
std::fill(buff.begin(), buff.end(), 0);
//socket_.async_receive(boost::asio::buffer(buff), boost::bind(&tcp_connection::handle_read, shared_from_this(), boost::asio::placeholders::error));
boost::asio::async_read(socket_, boost::asio::buffer(buff), boost::bind(&tcp_connection::handle_read, shared_from_this(), boost::asio::placeholders::error));
}
buff
एक boost::array<char, 1024>
+1 कुछ संभावित समाधानों का अच्छा सारांश –