我正在通过 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和OS级别支持)很有可能比您做得更好。
关于c# - 没有对象类型 'ImagePacket'的程序集ID。序列化异常捕获C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8971910/