Helllo伙计们, 我正在使用套接字创建客户端 - 服务器游戏。我正在尝试使用结构化消息,然后序列化和反序列化它们,我的结构中有3个字符串。我的代码序列化第一个字符串,但是后续两个字符串搞乱。有人告诉我,我的结构可能只有一个字符串有足够的空间。
我的讯息结构:
public struct Message_PDU
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10101)]
public string commandID;
public string playerIndex;
public string score;
};
序列化方法
private byte[] Serialize(Object myObject)
{
int size = Marshal.SizeOf(myObject);
IntPtr ip = Marshal.AllocHGlobal(size); //allocate unmanaged memory equivelent to the size of the object
Marshal.StructureToPtr(myObject, ip, false); //marshal the object into the allocated memory
byte[] byteArray = new byte[size];
Marshal.Copy(ip, byteArray, 0, size); //place the contents of memory into a byte[]
Marshal.FreeHGlobal(ip); //free unmanaged memory
return byteArray;
}
发送消息代码:
String szdata1 = "--";
String szdata2 = AlliasText.Text;
String szdata3 = "1";
Message_PDU myPDU = new Message_PDU();
myPDU.commandID = szdata1;
myPDU.playerIndex = szdata2;
myPDU.score = szdata3;
byte[] byData = Serialize(myPDU); //convert structure into a byte[]
m_ClientSocket.Send(byData, SocketFlags.None);
我试图增加SizeConst,但它没有用。调试显示只有第一个字符串被序列化。 谢谢
答案 0 :(得分:0)
感谢您的帮助。我的课程负责人帮助我解决了问题。 基本上,我只编组了第一个字符串而不是每一个字符串,因为我认为我正在整理整个结构。
消息结构应如下所示:
any
此外,SizeConst只是在消息中发送的字符长度,并且尽可能缩短是很重要的。 再次感谢你,我希望将来可以帮助别人。