代码之家  ›  专栏  ›  技术社区  ›  Chris H

一般助推ASIO流读取问题

  •  2
  • Chris H  · 技术社区  · 14 年前

    我对在ASIO中如何将数据读取到流中有点困惑。我的主要问题是:

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

    谢谢。

    1 回复  |  直到 14 年前
        1
  •  4
  •   Nicolás    14 年前

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

    如果你打电话 async_write 当另一个异步写操作正在进行时,结果是未定义的。类似于同时进行两次 write() 来自两个不同线程的同一套接字上的系统调用。你可能会把大数据搞得一团糟。

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

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

    有没有好的(和简单的)使用流的例子,而不是使用ASIO从TCP套接字读取缓冲区?

    你的意思是 asio::iostream ?有 examples 在ASIO文档中。