没有对象类型';的程序集ID;ImagePacket';.C#捕获到反序列化异常
本文关键字:异常 ImagePacket 反序列化 程序集 对象 类型 ID | 更新日期: 2023-09-27 18:21:04
我正在通过UDP套接字发送序列化的大型图像对象。当我在内存流中写入所有接收到的字节并传递内存流对象进行反序列化时,它会引发异常对象类型"ImagePacket"没有程序集ID。
接收端代码:
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
我怀疑这里的问题很简单:你使用UDP就像使用TCP一样。UDP是基于数据包的,但a:不保证数据包会按顺序到达,b:不保证不会丢弃或复制数据包。
我完全希望你有一些不正常的。如果你正在发送多条消息,也有可能有些消息被删除,而你在下一条消息中包含了一些消息。
要按照代码想要的方式使用网络,请使用TCP。否则,处理乱序、丢弃和重复数据包的责任完全由您承担。例如,这可以通过在数据包中添加一个序列号,并跟踪收到的内容——根据需要重新排序,删除重复项,并重新请求途中丢失的内容。基本上,重写TCP添加的所有内容!除非您有一个非常具体的场景,否则TCP堆栈(具有NIC和操作系统级别的支持)很可能会比您做得更好。