Я создаю службу UDP для andorid. Для ясности части коды скопирован здесь:Разделение пакетов UDP
byte[] message = new byte[1500];
DatagramPacket packet = new DatagramPacket(message, message.length);
socket = new DatagramSocket(Constants.LISTENING_PORT_NUMBER);
socket.receive(packet);
Проблема заключается в том, что я получаю UDP пакетов непрерывно. Например, пакет № 1 (длиной 250 байт), пакет № 2 (длиной в 182 байта), пакет № 3 (длина 403 байта) и т. Д.
Мне нужно получить и обработать отдельные UDP-пакеты, которые имеют переменную длина. Согласно спецификации протокола UDP UDP-пакеты имеют границы сообщений. Однако я не нашел решения на Java, которое может разделять UDP-пакеты.
В моем текущем решении я должен определить длину пакета, которую я должен прочитать, но я не знаю длину пакета, прежде чем я его получу.
Я пропустил пункт?
EDIT: Спасибо за как Тобиас и shazin оба правильные ответы. Печально, что я не могу ответить на два вопроса правильно.
socket.receive(packet);
будет получать до границы UDP-пакета, последующие пакеты могут быть считаны другим socket.receive(packet);
.
Моя проблема заключается в том, что в процессе первого сообщения поступившие дополнительные сообщения не обрабатываются из-за синхронной обработки, теперь я передам обработку сообщений на асинхронную задачу и, надеюсь, смогут своевременно поймать все поступившие пакеты ,
Я считаю, что все, что вы установили, переписывается, когда вы получаете пакет. Держись, пока я не возьму документацию. –
Почему бы вам не использовать udp? tcp имеет последовательность пакетов и сопоставление страхования – njzk2
@ njzk2 потоковые данные в реальном времени, где вы предпочитаете своевременность по надежности. –