Я пишу программу с использованием неблокирующего сокета Java и TCP.Я понимаю, что TCP является потоковым протоколом, но протокол IP нижнего уровня использует пакеты.Когда я вызываю SocketChannel.read (ByteBuffer dst), всегда ли я получу весь контент IP-пакетов?или это может закончиться в любой позиции в середине пакета?
Это имеет значение, потому что я пытаюсь отправлять отдельные сообщения через канал, каждое сообщение достаточно маленькое, чтобы его можно было отправить в одном IP-пакете безфрагментирован.Было бы здорово, если бы я всегда мог получить целое сообщение, вызвав read () на стороне получателя, в противном случае мне придется реализовать какой-то метод для повторной сборки сообщений.
Редактировать: предположим, что на отправителеКроме того, сообщения отправляются с большим интервалом (например, 1 секунда), поэтому они не собираются группироваться в один IP-пакет.На стороне получателя буфер, используемый для вызова read (ByteBuffer dst), достаточно велик для хранения любого сообщения.