我的這個代碼的目標是發送一個結構到一個服務器,等待這個結構從它讀取數據。所以我必須序列化所有引用,以便爲服務器提供一個它可以讀取和理解的結構。我有一個包含長,ulong,字符串,枚舉,長[]和其他結構的結構。我已經搜索了stackoverflow,但所有的解決方案序列化我的結構爲零,除了字符串。UWP - 序列化一個結構體以便發送它與TCP
如何正確地序列化結構,然後將其保存到byte [],最後使用tcp發送它?
我的頁眉STRUCT(that's why my struct looks like this):
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi, Pack = 4, Size = size)]
public struct _HEADER
{
[FieldOffset(0)]
public Constants._TYPE Type;
[FieldOffset(4)]
public long Cr;
[FieldOffset(12)]
public Id Id;
[FieldOffset(SIZE+12), MarshalAs(UnmanagedType.ByValArray)]
public long[] array;
}
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi, Pack = 4, Size = SIZE)]
public struct Id
{
[FieldOffset(0)]
public long Protocol;
[FieldOffset(8)]
public long Protocol;
[FieldOffset(16)]
public Constants._TYPE CType;
[FieldOffset(20)]
public Constants._TYPE Cred;
[FieldOffset(24)]
public Constants._TYPE CGred;
}
我的當前方法來串行化的結構:
IntPtr pointer = Marshal.AllocHGlobal(Marshal.SizeOf(header));
Marshal.StructureToPtr(header, pointer, false);
byte[] headerdata = new byte[Marshal.SizeOf(header)];
Marshal.Copy(pointer, headerdata, 0, headerdata.Length);
Marshal.FreeHGlobal(pointer);
我的當前方法發送數據:
_socket.Send(headerdata);
This is what I get in the tcp-packet, which I send to the server:
不要使用結構作爲網絡協議。使用網絡協議作爲網絡協議。 – EJP
我沒有實現服務器。服務器需要一個strcut,所以我必須發送一個結構 – David