[英]Sending binary data over socket in c++
在C ++中,我具有如下数据结构:
struct Data
{
int N;
double R;
char Name[20];
};
我必须将这个数据从客户端发送到另一个系统上的服务器(我必须发送一个数据结构数组,但我只能一个一个地发送它)。 我想将其作为二进制数据发送出去,以便可以从另一端提取数据并将其放入相同的struct类型中。
如果(客户端和服务器)都使用相同的编译器进行编译,则sizeof(Data)和结构中的所有位填充都将相同。 但是由于服务器是运行Linux的64位操作系统,而客户端甚至可能是32位Windows,因此Data中数据的顺序可能会有所不同。
我对吗? 解决这个问题的最佳方法是什么?
假设所有客户端和服务器将始终使用相同的编译器针对相同的体系结构和OS进行构建,这几乎总是一个坏主意。 最好编写代码,以指定的顺序将数据结构的成员显式打包为字节流,或者将数据转换为可以在另一端解析的非二进制格式(例如JSON或XML)。
您可以使用Boost.Serialization进行封送/解组(即,将数据从源计算机格式转换为适合传输的格式,然后从该格式转换为目标计算机使用的格式),然后将数据与Boost.Asio进行通讯。 。
正确的协议定义将帮助您解决此问题。 具有固定长度的报头,后跟可变长度的数据。
像这样
标头 ***
[DataSize]-2个字节
[MSG ID]-1个字节
包 **
[N]-4个字节
[R]-8个字节
[长度]-2个字节
[名称]-Len字节
读取字节并填充结构
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.