通过套接字发送包含Bitmap对象的结构

时间:2013-07-22 16:04:48

标签: c# sockets udp structure

我试图发送这个结构:

 public struct imageBlock

    {
        public uint blockId;
        public Bitmap block;
    }

使用udp套接字  首先,我使用此函数将结构转换为字节数组:

 public byte[] getBytes(MyStructure str)
    {
        int size = Marshal.SizeOf(str);
        byte[] arr = new byte[size];
        IntPtr ptr = Marshal.AllocHGlobal(size);
        Marshal.StructureToPtr(str, ptr, true);
        Marshal.Copy(ptr, arr, 0, size);
        Marshal.FreeHGlobal(ptr);

        return arr;
    }

我寄给它:

            buffer = crop.getBytes((imageBlock)ImageToBeSent[i]);

            crop.sender(buffer);

当我尝试接收结构时,问题很明显,我有一个例外:

                data = client.Receive(ref localEp);

                int size = Marshal.SizeOf(myStructure);
                IntPtr ptr = Marshal.AllocHGlobal(size);

                Marshal.Copy(data, 0, ptr, size);

                myStructure= (MyStructure)Marshal.PtrToStructure(ptr, myStructure.GetType());
                Marshal.FreeHGlobal(ptr);

在线:

  myStructure= (MyStructure)Marshal.PtrToStructure(ptr, myStructure.GetType());

我有这个例外:

运行时遇到了致命错误。错误的地址是0x792a02fe,在线程0x1860上。错误代码是0xc0000005。此错误可能是CLR中的错误,也可能是用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括COM-interop或PInvoke的用户封送错误,这可能会破坏堆栈。

感谢您的帮助;

0 个答案:

没有答案