Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我如何附加一些缓冲区?_C++_Boost_Boost Asio - Fatal编程技术网

C++ 我如何附加一些缓冲区?

C++ 我如何附加一些缓冲区?,c++,boost,boost-asio,C++,Boost,Boost Asio,我有一些客户端asio代码,在读取字节数之前使用read\u some()。但是从所有的例子来看,我不知道如何将读取缓冲区组装成一个包含整个消息的更大的缓冲区。我该怎么做 boost::array<char, 4096> buf; while (lnTotalBytesRead < BigMessageSize) { size_t len = obj->socket_.read_some(boost::asio::buffer(buf), error);

我有一些客户端asio代码,在读取字节数之前使用
read\u some()
。但是从所有的例子来看,我不知道如何将读取缓冲区组装成一个包含整个消息的更大的缓冲区。我该怎么做

boost::array<char, 4096> buf;
while (lnTotalBytesRead < BigMessageSize)
{
    size_t len = obj->socket_.read_some(boost::asio::buffer(buf), error);
    lnTotalBytesRead += len;
    // Need to append each received block into large block.
}
boost::阵列buf;
while(lnTotalBytesReadsocket\u.read\u some(boost::asio::buffer(buf),错误);
lnTotalBytesRead+=len;
//需要将每个接收到的块追加到大块中。
}

不要
读取一些
,通过以下方式一次读取整个缓冲区:

boost::阵列buf;
boost::asio::read(obj->socket,boost::asio::buffer(buf),错误);

在我看来,如果你真的不希望邮件太长,安迪的回答似乎是推荐的方法

通常情况下,您必须附加消息,直到您有了一个工作单元,然后才能继续执行某些操作—这强烈提示您需要在消息(标题、正文等)中添加一些标记结构,以便将单个消息与之隔离

您可以做的最简单的标记结构是在每条消息的开头用一个4字节的字来表示消息的长度。然后,您必须附加
read_some
,并在将消息发送到进一步处理之前检查消息的完整长度

我不知道如何将读取缓冲区组装成一个更大的缓冲区 包含整个消息的。我该怎么做

boost::array<char, 4096> buf;
while (lnTotalBytesRead < BigMessageSize)
{
    size_t len = obj->socket_.read_some(boost::asio::buffer(buf), error);
    lnTotalBytesRead += len;
    // Need to append each received block into large block.
}
对缓冲区使用一个而不是
boost::array
。尽管如此,您确实应该使用。如文档所述,它是一个组合操作,为您处理调用
read_some()

此操作通过零次或多次调用 流的读取功能


使用read_-some的唯一原因是缓冲区是否足够大,以至于它可能会在等待rest的过程中阻塞相当长的时间。感谢您的响应,但是有人能回答关于如何附加缓冲区的特定问题吗?