C++ Boost asio-分离不同的数据块

C++ Boost asio-分离不同的数据块,c++,boost,boost-asio,C++,Boost,Boost Asio,想象一下,我们创建了一个简单的客户端-服务器应用程序,将文件从客户端发送到服务器。我们使用助推asio 服务器开始侦听。客户端连接到服务器。客户端发送文件名和文件内容 但服务器只接收字节流。服务器如何检测文件名结束和文件内容开始 我的第一个想法是使用特殊的分隔符。客户端写入套接字文件名,然后是分隔符,然后是文件内容。服务器使用“read_until”接收文件名,使用“read”读取文件内容 这是一个好的解决方案吗 如果我想一行发送10个文件怎么办?在字节流中搜索分隔符可能很昂贵 我的第一个想法是

想象一下,我们创建了一个简单的客户端-服务器应用程序,将文件从客户端发送到服务器。我们使用助推asio

服务器开始侦听。客户端连接到服务器。客户端发送文件名和文件内容

但服务器只接收字节流。服务器如何检测文件名结束和文件内容开始

我的第一个想法是使用特殊的分隔符。客户端写入套接字文件名,然后是分隔符,然后是文件内容。服务器使用“read_until”接收文件名,使用“read”读取文件内容

这是一个好的解决方案吗

如果我想一行发送10个文件怎么办?在字节流中搜索分隔符可能很昂贵

我的第一个想法是使用特殊的分隔符

这是正确的方法。这是你们协议的责任。协议可以定义长度头或特殊分隔符

长度头在二进制协议(类似BSON)中更常见

特殊分隔符在文本协议中很常见

客户端写入套接字文件名,然后是分隔符,然后是文件内容

服务器使用“read_until”接收文件名,使用“read”读取文件内容

这是一个好的解决方案吗

对。只要您记得,
read\u直到
读取,直到收到包含分隔符的数据包。我可能会阅读更多的内容,因此您可能已经同时拥有了部分内容


另请参见:

谢谢。通常我有二进制协议。因此,长度标题似乎是我的最佳解决方案