【问题标题】:boost::asio::async_read and boost::asio::streambufboost::asio::async_read 和 boost::asio::streambuf
【发布时间】:2010-09-22 13:52:40
【问题描述】:

我将 async_read 与 streambuf 一起使用。但是,我想将读取的数据量限制为4,这样我就可以在进入正文之前正确处理标题。

我怎样才能使用 async_read 做到这一点?

【问题讨论】:

    标签: c++ boost boost-asio streambuf


    【解决方案1】:

    使用两个async_read 操作,第一个读取一个 4 字节的标头,第二个读取消息正文。您对第一个 async_read 的处理程序应该为消息正文启动 async_read

    asio 示例在几个地方使用了这种技术,serialization 示例就是其中之一。我也回答了一个类似的question,虽然它使用的是同步读取,但概念是一样的。

    【讨论】:

    • +1 使用 API 的丰富性比我的建议更好
    【解决方案2】:

    您可以使用transfer_at_least 作为CompletionCondition on async_read 来保证标头可用。

    一旦您处理了初始标头,就可以处理任何多余的正文数据(或进一步的标头)。

    【讨论】:

      【解决方案3】:
      boost::asio::transfer_exactly(streambuf.size()) 
      

      是你所需要的。试着像这样使用:

      boost::asio::async_read(socket_, 
                              buf,boost::asio::transfer_exactly(size_),
                              boost::bind(callback,
                              boost::asio::placeholders::error));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-02
        • 2013-12-21
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-24
        相关资源
        最近更新 更多