Socket, передача "больших" объектов - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Суть моей проблемы такова: Имеется клиент-серверное приложение на сокетах. Размер входящих данных довольно не предсказуем (от 4х байт до *очень много*). Так вот, частенько выходит, что размер буффера пришедший серверу превышает приемный буффер и при десериализации получаем ошибку, так как данные пришли куском. Поиски решения данной проблемы привели меня к некоторым вариантам решения, но вместе с ними появилось еще больше вопросов. 1) ограничить буфферы в размере, передавать данные частями (к примеру по 1024 байта), дописывая полученное в какой-то лист. Но, собственно, я не сильно понимаю, как это делается "правильно". Серверу каким-то образом ведь нужно сообщить, какая последовательность байт является последней, чтобы выйти из цикла и продолжить обрабатывать полученный массив байт. 2) socket.Available - думал, с помощью него смогу научить сервер находить последний элемент и обрывать цикл. Увы, как это работает - я так и не понял. В общем, буду благодарен если кто-нибудь разъяснит мне этот нюанс. За ранее спасибо!

Решение задачи: «Socket, передача "больших" объектов»

textual
Листинг программы
            TcpClient tcp = ....;
 
            using(var stream = tcp.GetStream())
            {
                var obj = (MyObject)new BinaryFormatter().Deserialize(stream);
                //...
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы