客户端服务器套接字结构化消息

时间:2018-03-16 14:59:44

标签: c# sockets server client

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,但它没有用。调试显示只有第一个字符串被序列化。  谢谢

1 个答案:

答案 0 :(得分:0)

感谢您的帮助。我的课程负责人帮助我解决了问题。 基本上,我只编组了第一个字符串而不是每一个字符串,因为我认为我正在整理整个结构。

消息结构应如下所示:

any

此外,SizeConst只是在消息中发送的字符长度,并且尽可能缩短是很重要的。 再次感谢你,我希望将来可以帮助别人。

相关问题