gpt4 book ai didi

c++ - Boost.Asio 什么时候调用 async_read_some 回调?

转载 作者:行者123 更新时间:2023-11-28 06:51:10 25 4
gpt4 key购买 nike

假设我有一个 Boos.Asio TCP 客户端,它可以发送一个字符串,如下所示:

client.sendStr("1111");

我还有一个异步的 Boost.Asio TCP 服务器,它将处理传入的数据包并打印它们,如下所示:

received string: "1111", size: 5.

问题是,当我多次调用 client.sendStr() 时,就像这样

client.sendStr("1111");
client.sendStr("2222");
client.sendStr("3333");

我可能会在服务器端得到各种结果,例如:

received string: "1111", size: 5.
received string: "2222", size: 5.
received string: "2222", size: 5.

received string: "111122223333", size: 13.

received string: "11112222", size: 9.
received string: "3333", size: 5.

我是网络新手,但我猜造成这种情况的原因是 TCP 是一种“基于流的协议(protocol)”。

我的问题是:

1) 我可以阻止 Boost.Asio 这样做吗? (假设“1111”和“2222”是我的应用程序的控制数据包,我不知道要连接什么)。

2) 我是否有可能得到这样的回调:

received string: "111122", size: 7.
received string: "22333", size: 6.
received string: "3", size: 2.

最佳答案

documentation对于 async_read_some 非常清楚:

Remarks

The read operation may not read all of the requested number of bytes. Consider using the async_read function if you need to ensure that the requested amount of data is read before the asynchronous operation completes.

TCP 是一种基于流的协议(protocol),您需要在应用层处理消息帧。这在很大程度上取决于您的协议(protocol),您的方案中的一种可能解决方案可能是空终止每条消息。或者,在每条消息之前包含一个固定的字节 header ,指示有效负载的长度。

关于c++ - Boost.Asio 什么时候调用 async_read_some 回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23939718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com