c++ socket 发送字节序结构体

2025-04-07 14:49:23
推荐回答(3个)
回答1:

数据传输时,如两端无法采用统一的处理模块,比如编写语言不同(当然C++和C#其实可以使用相同的序列化/反序列化模块,比如做成DLL)。最少需考虑两点: 1.字节对齐。C++/C#编译环境通常可选,如不一致收发的数据长度将不一样。 2.字节顺序,俗称的大小端。系统内字节顺序为低位在前,高位在后,但网络发送时往往是高位在前,低位在后。 你可以发送时(C++端)按1Byte对齐,先发送结构体长度,再发送结构的整个内存数据块,接收时(C#)按ByteStream方式接收,先接收长度,再根据长度接收数据块,然后自解析数据。

回答2:

结构体中的数据并不是像普通的char数组那样数据是连续排布的。结构体有一个内存对齐的问题,不同的操作系统不同的编译器不同的cpu对结构体对齐的策略都不一样。也就是说,要想写出通用的网络数据传输程序,就不能把结构体直接在网上传输。需要预先定义一个基于你自己应用程序的数据协议来,然后把结构体中的成员逐一复制到一个char数组中,然后将这个char数组发送出去,接收端需要逐个字节的解析收到的数据,按照协议规定,将数据在复制到接收端的相应结构体中去。

回答3:

不对的现象是什么?