Конец потока обнаружен до завершения синтаксического анализа. Отправка больших изображений через UDP-сокет. - PullRequest
1 голос
/ 23 января 2012

Я отправляю Кодированный JPEG Изображения в виде сериализованного сложного объекта через Сокет UDP .. Как поддержка датаграмм UDP макс.Длина от 52KB до 54KB , я записываю поступившие дейтаграммы в поток памяти, чтобы можно было сразу деэсериализовать его.Сериализуйте это Memory Stream Exception Брошено.

Ответы [ 2 ]

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

Некоторые очевидные наблюдения, которые могут помочь ...

  • почему новый MemoryStream каждый раз в цикле? это самая насущная проблема
  • почему бы и нет AccumulatingBytes += Receivedbytes.Length;

Также; если вы сами не обрабатываете ошибки и пропущенные данные, используйте TCP.

Так что-то вроде:

ImageStream = new MemoryStream();
while (AccumulatingBytes <= TotalSizeOfComplexObject)
{
    byte[] Recievedbytes = UdpListener.Receive(ref RemoteEndPoint);

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

    AccumulatingBytes += Recievedbytes.Length;
} 

затем установите ImageStream.Position = 0 перед десериализацией. Вам также, вероятно, следует проверить, что UdpListener не сообщает о EOF.

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

Вы писали поток байтов в 0 месте все время?

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

Может быть вам нужна вместо нуля переменная AccumulationBytes?

...