在delphi中包结构如下
MessageX=record
   User_ID             :byte;                
   Service_Id          :array[0..9] of char; 
   User_Name           :array[0..20] of char; 
   User_Password       :array[0..15] of char;  
   User_Type           :byte; 
   MsgContent      :array[0..160] of char;//字符串,短消息内容
  end; 
通过tcp发给C#后,C#如何构造对应结构体,以及如何接收并解析.多谢

解决方案 »

  1.   

    我目前的想法是构造一个如下结构体,
    [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
    public struct SubmitPacket
    {
    [MarshalAs(UnmanagedType.U1 , SizeConst=1)] public byte User_ID;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst=10)] public char[] Service_Id;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst=21)] public char[] User_Name;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst=15)] public char[] Password;
    [MarshalAs(UnmanagedType.U1, SizeConst=6)] public char[] User_Type;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst=161)] public char[] MsgContent;
    }
    c#收到报文为byte[],然后用Marshal.PtrToStucture将byte[]的指针传入,转化为structure.
      

  2.   

    失败!
    另外说明一下,delphi中填写包后,发送的主要步骤如下:
    stream2:=twinsocketstream.Create(form1.clientsocket1.Socket,5000);
    stream2.Write(objMessageX,sizeof(MessageX));
      

  3.   

    对于结构体的构造,同意Sqler() 的说法