1

我正在通过UDP 套接字发送序列化的大图像对象。当我在内存流中写入所有接收到的字节并传递内存流对象进行反序列化时,它会引发异常No assembly ID for object type 'ImagePacket'

接收端代码:

                 ImageStream = new MemoryStream();

                while (AccumulatingBytes <= TotalSizeOfComplexObject)
                 {

                  byte[] Recievedbytes = UdpListener.Receive(ref RemoteEndPoint);

                  ImageStream.Write(Recievedbytes, 0, Recievedbytes.Length);

                   AccumulatingBytes += Recievedbytes.Length;
                 } 


                  ImageStream.Position = 0;

                    imagecontainer = (ImageContainer)bformater.Deserialize(ImageStream);//Here the Code Segment Breaks and Exception thrown
4

1 回答 1

1

我怀疑这里的问题很简单:您使用 UDP 就像使用 TCP 一样。UDP是基于数据包的,但是a:不保证数据包会按顺序到达,b:不保证数据包不会被丢弃或重复。

我完全希望你有一些问题。如果您要发送多条消息,也可能有一些消息被丢弃,并且您在下一条消息中包含了一些消息。

要以您的代码想要的方式使用网络:使用 TCP。否则,处理乱序、丢弃和重复的数据包的责任完全由您承担。例如,这可能是通过向数据包添加序列号,并跟踪已接收到的内容 - 根据需要重新排序它们,删除重复项,并重新请求任何在途中死亡的数据包。基本上,重写 TCP 添加的所有内容!除非您有一个非常具体的场景,否则 TCP 堆栈(具有 NIC 和操作系统级别的支持)很有可能会比您做得更好。

于 2012-01-23T13:07:38.963 回答