【问题标题】:general boost asio stream reads question一般提升 asio 流读取问题
【发布时间】:2010-01-02 04:54:07
【问题描述】:

我对在 asio 中如何将数据读入流中的工作方式有点困惑。我的主要问题是:

  1. 如果一台计算机同时进行多次异步写入,而接收计算机上只有一次异步读取,会发生什么情况。通过 TCP 协议,数据是否有可能交错?
  2. ASIO 库如何知道何时调用处理读取流中的新数据的处理程序?它会调用每个接收到的字节吗?客户端何时断开连接?
  3. 有没有使用流而不是使用 asio 从 tcp 套接字读取缓冲区的好的(简单)示例?

谢谢。

【问题讨论】:

    标签: c++ boost-asio


    【解决方案1】:

    如果一台计算机同时进行多次异步写入,而接收计算机上只有一次异步读取,会发生什么情况。通过 TCP 协议,数据是否有可能交错?

    如果您在另一个异步写入操作正在进行时调用async_write,则结果未定义。这类似于从两个不同的线程在同一个套接字上同时执行两个write() 系统调用。你可能会把大数据弄得一团糟。

    ASIO 库如何知道何时调用处理读取流中的新数据的处理程序?它会调用每个接收到的字节吗?客户端何时断开连接?

    如果你调用async_read,它会在收到所有请求的数据量时调用回调。如果你调用async_read_some,它会在至少有一个字节时调用回调,但可能更多。可能是对方发送的单个 TCP 数据包的内容。

    有没有使用流的好(简单)示例,而不是使用 asio 从 tcp 套接字读取的缓冲区?

    你是说asio::iostream? asio文档中有examples

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-04
      • 2011-11-26
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多