C # десериализация структуры после получения ее через TCP

Я посылаю свой собственный объект struct "package" через интерфейс TCP, который C # предлагает с TCPListener и TCPClient.

Это моя структура

[Serializable]
struct RemuseNetworkPacket
{
    public String ApplicationCode;
    public String ReceiverCode;
    public RemusePacketType Type;
    public uint ID;
    public uint cID;
    public String Name;
    public byte[] Data;
    public String Text;
    public System.Drawing.Point Coords;
    public String Timestamp;
    public String Time;
    public String SenderName;

    public byte[] Serialize()
    {
        var buffer = new byte[Marshal.SizeOf(typeof(RemuseNetworkPacket))];
        var gch = GCHandle.Alloc(buffer, GCHandleType.Pinned);
        var pBuffer = gch.AddrOfPinnedObject();
        Marshal.StructureToPtr(this, pBuffer, false);
        gch.Free();
        return buffer;
    }

    public void Deserialize(byte[] data)
    {
        var gch = GCHandle.Alloc(data, GCHandleType.Pinned);
        this = (RemuseNetworkPacket)Marshal.PtrToStructure(gch.AddrOfPinnedObject(), typeof(RemuseNetworkPacket));
        gch.Free();
    }
}

Я использую методы сериализации в структуре для подготовки и получения данных до и после отправки.

Чтобы сообщить получателю размер входящих данных, я добавляю некоторые данные заголовка к отправляемым байтам в формател = 212; ... что означает длину = 212; и... это остальная часть пакета.

На приемном конце я ищу это, пока не найду весь l = xxxx; Затем я создаю новый байтовый массив без заголовка, затем пытаюсь десериализовать данные. Байт пакета для десериализации: tcp stream'sbuffer.Length - foundHeaderSize (Л = хххх;)

Если я запускаю клиент и сервер на одном компьютере, он работает без ошибок, однако, если у меня клиент и сервер на разных компьютерах, я получаю исключения и происходит сбой.

Исключение имеет место при десериализации пакета, говоря:

* System.Runtime.InteropServices.SafeArrayTypeMismatchException Произошло несоответствие между типом времени выполнения массива и типом sb, записанным в метаданных в System.Runtime.InteropServices.PtrToStructureHelper

Stacktrace: System.Runtime.InteropServices.PtrToStructureHelper (IntPtr ptr, Структура объекта, Логическое значение allowValueClasses) в System.Runtime.InteropServices.PtrToStructure (IntPtr ptr, Тип StructureType .. *

Я прошу помощи, чтобы определить причину проблемы. Могу ли я так не делать с объектами, которые пришли по сети?

Ответы на вопрос(2)

Ваш ответ на вопрос