我有一些简单的问题,我有一个客户端-服务器应用程序和在线发送的数据。
我希望能够恢复数据并正确处理它。
struct T1
{
int id;
int foo;
};
struct T2
{
int id;
char foo;
int bar;
};
让我们采用这些结构,它们在网络上发送,前面有一个 int,它将告诉 T1 或 T2 是否跟随。如果客户端向我发送 T1,然后向我发送 T2,我是否可以保证我可以使用 asio::ip::tcp::socket.async_read() 读取完整的结构?我想设置一个处理单个结构的处理程序,但是如果我无法在单个 async_read() 中读取所有内容会发生什么?
异步操作将继续进行,直到满足以下条件之一:
- 提供的缓冲区已满。也就是说,传输的字节数等于缓冲区大小的总和。
- 发生错误。
它会丢弃无法读取的数据吗?它会触发另一个 async_read 吗?而且,如果我的客户按顺序向我发送 ID+structure ,我是否可以保证 async_read 只会获得一个 ID+structure ?或者操作系统可以优化事物并将它们放在同一个 paquet 中?正如您可能已经看到的,我有点困惑,我想在设计服务器/客户端应用程序时做出正确的决定,任何帮助将不胜感激。
谢谢你。