繁体   English   中英

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

[英]when does Boost.Asio call async_read_some callbacks?

可以说我有一个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是“基于流的协议”。

我的问题是:

1)我可以阻止Boost.Asio这样做吗? (让我们说“ 1111”和“ 2222”是我的应用程序的控制数据包,但我没有连接它们)。

2)有没有可能我会收到这样的回调:

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

async_read_some文档非常清楚:

备注

读取操作可能无法读取所有请求的字节数。 如果需要确保在异步操作完成之前读取请求的数据量,请考虑使用async_read函数。

TCP是基于流的协议,您将需要在应用程序层处理消息帧。 这在很大程度上取决于您的协议,在您的方案中,一种可能的解决方案可能是使每个消息都为空。 或者,在每个指示有效载荷长度的消息之前包括一个固定的字节头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM