struct msg
        {
            public string send_id;
            public string mb_id;
            public string content;
            public int type;
        }
msg mg = new msg();
mg.mb_id="你好";
mg 转换 byte;
发送 byte;服务端  
接收byte;
byte 转换 msg结构体;
mg.mb_id 乱码Encoding.UTF8.GetBytes()单纯的转byte会用,可是在结构体中才能解决乱码问题呢?

解决方案 »

  1.   

    对string规定字节数,比如        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
            private string stockcode;
    然后再struct上加上
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)]
    struct mystruct
    {
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
            private string stockcode;}
      

  2.   

    你可以使用。net的二进制序列化,体积小速度快
      

  3.   

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)]
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
    能给解释一下原理吗?谢谢
    圣经说:你必须知道真相,因为真相会让你更自由~~
      

  4.   

           msg mg = new msg();
                mg.mb_id = mb_id;
                mg.type = 0;
                mg.content = ipa.ToString();
                MsgSend = serialize(mg);
                ClientSocket.Send(MsgSend, MsgSend.Length, SocketFlags.None);
            }
            public static byte[] serialize(object obj)
            {
                IFormatter formatter = new BinaryFormatter();
                MemoryStream ms = new MemoryStream();
                formatter.Serialize(ms, obj);
                byte[] tmp = ms.ToArray();
                ms.Close();
                return tmp;
            }换成了序列化,请问一下应该怎么接呢?高人给指点一下吧
      

  5.   

    服务端
    ClientSocket[ClientNum].Receive(MsgGet, MsgGet.Length, SocketFlags.None);
    ???