Задать вопрос
@nadom

Какие потоки вводы/вывода использовать в клиент-серверном приложении (TCP)?

Добрый день.
Создаю клиентское и серверное приложение на Java (TCP протокол).
Однако не могу подобрать какие декораторы потоков ввода/вывода использовать в данном случае.
Сейчас использую ObjectInputStream и ObjectoutputStream соответсвенно, но они не очень удобны.
Подскажите какие лучше использовать, учитывая специфику задачи:
Клиент посылает короткие сообщения на сервер (один объект типа String) в качестве ответа получает короткое или длинное сообщение (один объект типа String или их массив).
Сервер, соответсвенно, наоборот.

В С++ я бы передавал в начале любого сообщения его длину, чтобы получатель знал, сколько раз считывать входной поток. Думаю, на Java есть более высокоуровневое решение.
  • Вопрос задан
  • 567 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@nirvimel
Вам нужны Protobuf, BSON, JSON или Thrift.
И забудьте о ObjectInputStream.

UPD: Сравнительный бенчмарк.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Olej
@Olej
инженер, программист, преподаватель
Я думаю, что ваш вопрос относится не к Java, а к специфике обмена по TCP:
- в TCP нет сообщений, никаких - это поток, ... труба байт, куда в один конец втекает, а из другого вытекает ;-)
- поэтому для передачи сообщений вы должны их как-то сами форматировать
- наиболее широко используются 2 способа: а). передавать в потоке фиксированный ограничитель конца сообщения (так работают большинство протоколов Интернет), обычно это "\n\n" (пустая строка) и б). передача вначале длины, а затем байты тела сообщения (подобно POST в HTTP).
- иногда используют 2 этих способа вместе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы