Как заставить Java отправлять несколько сообщений вместе? - PullRequest
3 голосов
/ 24 мая 2011

Вот выдержка из моего кода:

OutputStream out = this.socket.getOutputStream();
out.write(fourBytes);
out.write(someBytes);
out.flush();

Он отправляется в 2 пакетах, хотя первый из них имеет длину всего 4 байта.Есть ли другой способ, кроме объединения байтовых массивов вместе, чтобы отправить их вместе?

Я уже пробовал setTcpNoDelay(false).

Ответы [ 3 ]

3 голосов
/ 24 мая 2011

Конечно. Используйте BufferedOutputStream. : -Р

setTcpNoDelay изменяет способ отправки пакетов операционной системой, а не способ отправки пакетов Java. Единственный способ изменить последнее - это буферизовать вывод, как я предлагал выше.

Кстати, это не влияет на количество пакетов, на которые действительно делятся ваши данные. Опять же, это зависит от ОС, а также от окна, указанного принимающей стороной. Таким образом, вы не можете использовать пакеты для разделения данных.

1 голос
/ 24 мая 2011

Обернуть его буферизованным потоком вывода

0 голосов
/ 24 мая 2011

Я думаю, что отключение Nagle выполняется setTcpNoDelay(true)

...