C # desserializando uma estrutura depois de recebê-la através do TCP

Estou enviando meu próprio objeto struct "pacote" através da interface TCP que o C # oferece com TCPListener e TCPClient.

Esta é minha estrutura

[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();
    }
}

Estou usando os métodos de serialização dentro da estrutura para preparar e recuperar os dados antes e depois do envio.

Para que o destinatário saiba o tamanho dos dados recebidos, adiciono alguns dados de cabeçalho aos bytes enviados, no formato del = 212; ... o que significa comprimento = 212; e a... é o resto do pacote.

No lado receptor, procuro isso até encontrar l = xxxx inteiro; então eu faço uma nova matriz de bytes sem o cabeçalho e tento desserializar os dados. O byte de pacote a ser usado para desserialização é: tcp stream'sbuffer.Length - foundHeaderSize (l = xxxx;)

Se eu executar o cliente e o servidor na mesma máquina, ele funcionará sem erros; no entanto, se eu tiver o cliente e o servidor em máquinas separadas, recebo exceções e ele trava.

A exceção ocorre quando o pacote está sendo desserializado, dizendo:

* System.Runtime.InteropServices.SafeArrayTypeMismatchException Ocorreu uma incompatibilidade entre o tipo de tempo de execução da matriz e o tipo sb registrado nos metadados em System.Runtime.InteropServices.PtrToStructureHelper

Stacktrace: System.Runtime.InteropServices.PtrToStructureHelper (IntPtr ptr, Estrutura de objetos, Boolean allowValueClasses) em System.Runtime.InteropServices.PtrToStructure (IntPtr ptr, Type structureType .. *

Estou pedindo ajuda para identificar a causa do problema. Não posso fazer isso com objetos que vieram pela rede?

questionAnswers(2)

yourAnswerToTheQuestion