2

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

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

谢谢。

4

1 回答 1

4

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

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

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

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

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

你的意思是asio::iostream?asio 文档中有示例

于 2010-01-02T05:26:30.820 回答