![](/img/trans.png)
[英]send data struct over network between C/C++ server, C/C++ and C# clients
[英]How should a C# struct be sent over the network to a C++ client?
我在获取通过 TCP 套接字发送到 C++ 客户端的 C# 结构字节以正确读取时遇到了一些麻烦。 这里是结构...
C#中的结构体
public struct TankBattleStateData
{
public int playerID;
public float currentHealth;
public Vector3 position;
public Vector3 forward;
public Vector3 cannonForward;
public int canFire;
public int tacticalCount;
}
C++ 结构体
struct TankBattleStateData
{
int playerID;
float currentHealth;
float position[3];
float forward[3];
float cannonForward[3];
int canFire;
int tacticalCount;
};
传输过程如下...
System.Runtime.InteropServices.Marshal
获取表示结构的 C# 字节数组unsigned char
数组中,如果需要,在复制之前调整大小
TankBattleStateData *
并将其取消引用以访问其字段。 我始终发现,最后一个字段tacticalCount
在 C++ 客户端上与在 C# 客户端上的值不同。 例如,我将从服务器发送1
并在客户端返回81742424
。
环境
操作系统:Windows 10 x64
服务器:C# w/.NET Framework 2.0 (Unity3D 5.3.2f1)
客户端:C++ 带 MSVC++14
我想知道什么
我遇到的一个小问题是 C# bool
被编组为4 bytes而不是 1 byte,这是 MSVC++14 中 bool 的大小。 我想使用bool
,但为了减少可能出现的问题的数量,我现在使用int
。
将[StructLayout(LayoutKind.Sequential)]
添加到结构中,然后使用[FieldOffset]
来布置字段以与 C++ 版本完全匹配。
您应该阅读的是数据结构的序列化和反序列化。 有多种协议、库和方法可用。 将原始数据发送到/从内存中发送可能会对字节序、文本字段和数组产生奇怪的影响。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.