Розетки с пакетами?Что я должен использовать? - PullRequest
0 голосов
/ 22 июля 2011

Итак, я разрабатываю приложение для Android, которое связывается с сервером через сокет. Теперь телефон будет постоянно получать данные с сервера. Пакеты не все будут одинакового размера. Первый байт пакета является типом, а затем, если это применимо, следующие четыре байта указывают размер. После этого, это число с плавающей точкой (4 байта).

Какой лучший способ прочитать это? вызов readByte (), readFloat (), readFloat () и т. д. или использование этих дейтаграмм, на которые я наткнулся? Объяснить, почему. Если вы хотите получить более подробную информацию, пожалуйста, спросите.

Спасибо

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Звучит так, как будто вы хотите DataInputStream и BuferredInputStream ваш поток ввода сокетов. Вам не нужны дейтаграммы, потому что это для UDP, а не для сокетов.

Тогда я бы использовал readByte (), опционально readInt (), затем readFloat () и т. Д.

0 голосов
/ 22 июля 2011

IIUC, если вы говорите о дейтаграммах JDK, они не являются сокетами, они предназначены для связи по UTP, легче, чем TCP, но менее надежны и обычно используются для потоковой передачи аудио / видео в реальном времени.

Я бы пошел с DataInputStream / DataOutputStream и использовал бы readByte, readInt, readFloat. Это сэкономит вам много информации о кодировании комплексных чисел на проводе, а также добавит (тонкий) слой обнаружения ошибок.

Если у вас есть Java на другой стороне, это не должно быть проблемой вообще. Если у вас есть C / C ++ с другой стороны, имейте в виду, что он может (но не должен) использовать порядковый номер с прямым порядком байтов вместо порядкового номера с обратным порядком байтов, и в этом случае ваши числа (кроме readByte) будут выглядеть зашифрованными. Вы можете легко найти процедуры для чтения и порядкового номера в java, но это может вызвать приступ боли в первые пару часов:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...