Socket, передача "больших" объектов - C#
Формулировка задачи:
Доброго времени суток!
Суть моей проблемы такова:
Имеется клиент-серверное приложение на сокетах. Размер входящих данных довольно не предсказуем (от 4х байт до *очень много*). Так вот, частенько выходит, что размер буффера пришедший серверу превышает приемный буффер и при десериализации получаем ошибку, так как данные пришли куском. Поиски решения данной проблемы привели меня к некоторым вариантам решения, но вместе с ними появилось еще больше вопросов.
1) ограничить буфферы в размере, передавать данные частями (к примеру по 1024 байта), дописывая полученное в какой-то лист. Но, собственно, я не сильно понимаю, как это делается "правильно". Серверу каким-то образом ведь нужно сообщить, какая последовательность байт является последней, чтобы выйти из цикла и продолжить обрабатывать полученный массив байт.
2) socket.Available - думал, с помощью него смогу научить сервер находить последний элемент и обрывать цикл. Увы, как это работает - я так и не понял.
В общем, буду благодарен если кто-нибудь разъяснит мне этот нюанс.
За ранее спасибо!
Решение задачи: «Socket, передача "больших" объектов»
textual
Листинг программы
TcpClient tcp = ....; using(var stream = tcp.GetStream()) { var obj = (MyObject)new BinaryFormatter().Deserialize(stream); //... }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д