2013-03-14 73 views
1

我剛剛創建了一個非常簡單的C++類,它提供了一些方法,如connect()read(),而不是公開所有Boost.Asio套接字調用。使用Boost.Asio只讀字節數量

現在,我試圖找出如何創建僅讀取所需的字節數量的方法:

SocketClient::read(int bytes, char* data); //reads desired amount of bytes and puts them in data, size of data>bytes! 

不幸的是,我發現在Boost.Asio的無read_byte功能。我不想丟棄已收到但尚未讀取的字節。

Here is my class.

+0

從文檔,這不是明顯的數據我不看會發生什麼。我**需要**來讀取字節數。確切的數字。不多。不低於。如果少了,功能會被阻止。 **當有更多需要時會發生什麼?** – 2013-03-14 18:24:36

+0

爲什麼你不能只用你自己的內部緩衝機制?閱讀可用的內容,如果$ bytes字節數可用,則返回那麼多字節,否則請閱讀更多內容。 – EHuhtala 2013-03-14 18:54:07

回答

6

read功能似乎恰好提供你所需要的:

此功能用於從 流中讀取一定數量的字節的數據。此次電話會議將阻塞,直到下列條件之一爲真 :

- The supplied buffers are full. That is, the bytes transferred 
    is equal to the sum of the buffer sizes. 
- An error occurred. 

用法示例:

boost::asio::read(stream, boost::asio::buffer(data, size)); 
+0

我從哪裏得到數據流?那是'tcp :: socket'的成員嗎?或者我可以在這裏使用'socket'的實例嗎? – 2013-03-14 21:07:54

+2

是的,你可以直接使用套接字。任何支持[SyncReadStream](http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/reference/SyncReadStream.html)概念的東西都可以在這裏使用 – 2013-03-14 22:02:41

+0

我已經實現了相同的功能,它沒有返回實際結果並且請求被掛起。 – 2015-04-13 10:43:19