我对在 asio 中如何将数据读入流中的工作方式感到有些困惑。我的主要问题是:
- 如果一台计算机同时进行多个异步写入,而接收计算机上只有一个异步读取,会发生什么情况。通过 TCP 协议,数据是否有可能交错?
- ASIO 库如何知道何时调用处理读取流中的新数据的处理程序?它会调用每个接收到的字节吗?当客户端断开连接?
- 有没有使用流的好(和简单)示例,而不是使用 asio 从 tcp 套接字读取的缓冲区?
谢谢。
我对在 asio 中如何将数据读入流中的工作方式感到有些困惑。我的主要问题是:
谢谢。
如果一台计算机同时进行多个异步写入,而接收计算机上只有一个异步读取,会发生什么情况。通过 TCP 协议,数据是否有可能交错?
如果async_write
在另一个异步写入操作正在进行时调用,则结果未定义。这类似于write()
从两个不同的线程在同一个套接字上同时执行两个系统调用。你可以把大数据弄得一团糟。
ASIO 库如何知道何时调用处理读取流中的新数据的处理程序?它会调用每个接收到的字节吗?当客户端断开连接?
如果您调用async_read
,它将在收到所有请求的数据量时调用回调。如果你调用async_read_some
,它会在至少有一个字节时调用回调,但可能更多。可能是另一端发送的单个 TCP 数据包的内容。
有没有使用流的好(和简单)示例,而不是使用 asio 从 tcp 套接字读取的缓冲区?
你的意思是asio::iostream
?asio 文档中有示例。