2013-03-14 27 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