Нет идентификатора сборки для типа объекта 'ImagePacket'. Исключение сериализации поймано C # - PullRequest
1 голос
/ 23 января 2012

Я отправляю сериализованный объект большого изображения через UDP-сокет . Когда я записываю все полученные байты в поток памяти и передаю объект потока памяти для десериализации, возникает исключение Нет идентификатора сборки для типа объекта '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

1 Ответ

1 голос
/ 23 января 2012

Я подозреваю, что проблема здесь проста: вы используете UDP как TCP. UDP основан на пакетах, но a: не гарантирует, что пакеты будут доставлены по порядку, а b: не гарантирует, что пакеты не будут отброшены или дублированы.

Я полностью ожидаю, что у вас есть некоторые не в порядке. Если вы отправляете несколько сообщений, возможно, что некоторые из них были отброшены, и вы включили несколько из следующего сообщения.

Чтобы использовать сеть так, как этого требует ваш код: используйте TCP. В противном случае ответственность за определение неупорядоченных, отброшенных и дублированных пакетов лежит полностью на вас. Это может быть, например, путем добавления порядкового номера к пакету и отслеживания того, что было получено - переупорядочивание их по мере необходимости, удаление дубликатов и повторный запрос любого, который умер в пути. В основном, переписывая все, что добавляет TCP! Если у вас нет очень специфического сценария, есть хороший шанс, что стек TCP (с поддержкой NIC и уровня ОС) справится с этим лучше, чем вы.

...