我正在使用帶有streambuf的async_read。不過,我想限制讀取的數據量爲4,所以我可以在正文前正確處理標題。boost :: asio :: async_read和boost :: asio :: streambuf
如何使用async_read做到這一點?
我正在使用帶有streambuf的async_read。不過,我想限制讀取的數據量爲4,所以我可以在正文前正確處理標題。boost :: asio :: async_read和boost :: asio :: streambuf
如何使用async_read做到這一點?
使用兩個async_read
操作,其中第一個讀取4個字節的標題,第二個讀取消息正文。您的第一個async_read
的處理程序應該啓動消息正文的async_read
。
asio的例子在幾個地方使用這種技術,serialization的例子是一個例子。我也回答了類似的question,雖然它使用同步讀取,但概念是相同的。
您可以使用transfer_at_least作爲CompletionCondition on async_read保證標題可用。
處理初始標題後,可以處理任何多餘的正文數據(或其他標題)。
boost::asio::transfer_exactly(streambuf.size())
是你need.just嘗試使用這樣的:
boost::asio::async_read(socket_,
buf,boost::asio::transfer_exactly(size_),
boost::bind(callback,
boost::asio::placeholders::error));
+1使用API的豐富程度比我更好的建議 – 2010-09-22 14:40:19