gpt4 book ai didi

c# - 在 C# 客户端上接收从 C++ 服务器发送的数据

转载 作者:行者123 更新时间:2023-11-28 06:00:55 25 4
gpt4 key购买 nike

C++ 服务器将向 C# 客户端发送这样的结构:

typedef struct {

int cmd; //commend of order
int state; //the state of communication
int step; //the step
int dataLength; //data length
char data[DATA_SIZE];//data
} Message;

我想使用 C# 客户端接收结构并访问成员和数据,我该怎么做?

最佳答案

我已经解决了这个问题,我在 C# 中这样定义结构:

[StructLayout(LayoutKind.Sequential,Pack =1), Serializable]
struct Message
{
public int cmd;
public int state;
public int step;
public int dataLength;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string ip_segment;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
public byte[] data;
}

当我收到一个字节数组时,我将它转换为这样的消息:

public object BytesToStruct(byte[] bytes, Type type)
{
//get the size of Message
int size = Marshal.SizeOf(type);

if (size > bytes.Length)
{

return null;
}
//allocate Message object space
IntPtr structPtr = Marshal.AllocHGlobal(size);
//copy the byte array to the space
Marshal.Copy(bytes, 0, structPtr, size);
//convert byte array to struct Message
object obj = Marshal.PtrToStructure(structPtr, type);
//free the space
Marshal.FreeHGlobal(structPtr);
//return object
return obj;
}

关于c# - 在 C# 客户端上接收从 C++ 服务器发送的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33307497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com