Как установить формат пакета udp? - PullRequest
0 голосов
/ 20 января 2011

В назначении требовалось сформировать специальную сеть между двумя ноутбуками, переключив карту беспроводной локальной сети на двух ноутбуках в специальный режим, а затем выбрав подходящий SSID. Я создал сеть adhock между labtops. Затем потребовалось разработать приложение «Отправитель» и «Получатель», чтобы отправлять простое сообщение «Hello World» с одного ноутбука и получать его на другом с помощью сокетов. Я сделал это успешно с помощью сокетов дейтаграмм udp и пакетов udp ( в java), поскольку в ad-hoc-сетях нет сервера. Единственная проблема заключается в том, что было указано, что формат пакета должен выглядеть следующим образом, где данные представлены в виде массива байтов максимальной длины = 64 КБ (предположим, что представлен IP-адрес в 2 байта):

| | | | | | | | | | | |H|E|L|L|O| |W|O|R|L|D|                          
__________|___________| 
Sender ID |Reciever ID|       data
(4 bytes) (4 bytes)   

Я знаю, что на стороне получателя вы можете получить адрес отправленного пакета, используя packet.getAddress (); и адрес принимающей стороны уже известен, но я не понимаю назначение этого формата или как установить формат пакета. Я просто хочу знать, каков фактический формат пакета udp и как установить формат пакета udp в java. Как создание пакета dataGram путем указания байтового массива буфера, intelAddress и порта задает формат пакета? Нужно ли изменять байтовый массив буфера таким же форматом, как указано выше (хотя адрес отправителя отправляется в любом случае)? Пожалуйста, ответьте мне как можно скорее. Любая помощь будет оценена. Заранее спасибо.

1 Ответ

1 голос
/ 20 января 2011

UDP-пакет имеет подразумеваемый формат. http://en.wikipedia.org/wiki/User_Datagram_Protocol Java позаботится о 8 байтах заголовка, которые должны быть там (порт источника, порт назначения, длина, контрольная сумма). Даже если вы предоставите только один байт данных, 8-байтовый заголовок все равно будет правильно создан Java. Вы не несете ответственности за формирование этих заголовков, только за предоставление значений, которые в них входят.

Все, что у вас есть под контролем - это раздел данных пакета. Это может быть отформатировано так, как вам нравится. Похоже, вы должны отформатировать его, как вы показали выше. Значение этого формата может быть дискуссионным (источник, адреса назначения), но похоже, что вы должны придерживаться его независимо от.

Да, вы должны изменить байтовый массив буфера так, чтобы он соответствовал предоставленному вами формату. Другие значения (IP-адрес и порт) используются либо для формирования заголовка, либо для фактической отправки пакета по проводам.

РЕДАКТИРОВАТЬ: Извините, 4-байтовый заголовок заменен на 8. Мой плохой. Вы могли бы подумать, что я могу сейчас прочитать спецификацию протокола.

...