Отправка объекта через дейтаграммы сокетов Java - PullRequest
0 голосов
/ 02 октября 2011

Я реализую этот пример , так как хочу транслировать нескольким клиентам. При попытке использовать сокет для отправки другого объекта (который был сериализован), я получаю сообщение об ошибке, в котором говорится, что сокет (в примере) не может отправить объект через него. Разве датаграмма сокет не может отправлять / получать объекты?

Ответы [ 2 ]

4 голосов
/ 02 октября 2011

Не в общем, нет. Пакеты дейтаграмм, как правило, относительно небольшие - вы можете попробовать сериализовать ваш объект в ByteArrayOutputStream, завернутый в ObjectOutputStream, а затем попытаться отправить байтовый массив впоследствии - но вы можете обнаружить, что он становится слишком большим очень быстро.

Использование более эффективного формата сериализации, такого как Буферы протокола , вероятно, позволит вам получить больше информации в одном пакете, но обычно вместо этого вы хотите сериализовать в поток из одного пакета ... и как только вы начнете пытаться поместить потоковый протокол поверх протокола на основе дейтаграмм - ну, вы в конечном итоге получите TCP довольно быстро, как только он быть надежным.

Если вы можете дать нам более подробную информацию о том, что вы пытаетесь сделать (включая ограничения надежности - насколько это серьезно, если пакет утерян?), Мы можем помочь вам больше.

1 голос
/ 02 октября 2011

Лучше всего использовать TCP или другую библиотеку, например jGroups

JGroups - это инструментарий для надежной многоадресной связи.

...