在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#如何构造对应结构体,以及如何接收并解析.多谢
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#如何构造对应结构体,以及如何接收并解析.多谢
[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.
另外说明一下,delphi中填写包后,发送的主要步骤如下:
stream2:=twinsocketstream.Create(form1.clientsocket1.Socket,5000);
stream2.Write(objMessageX,sizeof(MessageX));