このコードで私の目的は、この構造体がデータを読み出すのを待つサーバに構造体を送ることです。だから私はそれを読むことができ、理解することができる構造体をサーバーに与えるためにすべての参照をシリアル化する必要があります。UWP - TCPを使って送るために構造体をシリアライズ
私はlong、ulong、string、enum、long []などの構造体を含む構造体を持っています。私はすでにstackoverflowを検索しましたが、すべてのソリューションは、文字列を除いてゼロに自分の構造体をシリアル化します。
構造体を正しくシリアル化し、バイト[]に保存して、最後にtcpで送信しますか?
マイヘッダ構造体(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