c# - 没有对象类型 'ImagePacket'的程序集ID。序列化异常捕获C#

标签 c# image sockets udp binary-deserialization

我正在通过 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/

相关文章:

c# - 如何将图像像素值作为 RGB 读取到二维数组中?

c# - OpenXML:Excel,提取单元格文本和图像/图片数据

android - 通过热点在两个 Android 设备之间进行数据交换

c# - 代码重构,以消除代码重复

c# - 我的类(class)应该订阅自己的公共(public)事件吗?

ios - 随机图像到(许多) ImageView

java - Apache Arrow Plasma 客户端 - 无法连接到内存存储 (UnsatisfiedLinkError)

Android客户端与C服务器文件传输

c# - 允许在 IEnumerable<MyObj> 上使用临时表达式

c# - 为什么我向 MySqlParameter 传递参数时得到 "You have an error in your SQL Syntax"?