2017-04-25 73 views
0

我的這個代碼的目標是發送一個結構到一個服務器,等待這個結構從它讀取數據。所以我必須序列化所有引用,以便爲服務器提供一個它可以讀取和理解的結構。我有一個包含長,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:

+0

不要使用結構作爲網絡協議。使用網絡協議作爲網絡協議。 – EJP

+0

我沒有實現服務器。服務器需要一個strcut,所以我必須發送一個結構 – David

回答

相關問題