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