Вопрос

При назначении необходимо было сформировать специальную сеть между 2 ноутбуками, переключив карту беспроводной локальной сети в 2 ноутбуках на специальный режим, а затем выбрав подходящий SSID. Я создал сеть Adhock между Labtops. Затем потребовалось разработать «отправитель» и приложение «приемник», чтобы отправить простое сообщение «Hello World» с одного ноутбука и получить его на другом, используя сокеты. Я успешно сделал его с помощью гнезда DATAGRAM и пакеты UDP ( в Java), поскольку в сетях Adhoc нет сервера. Единственная проблема заключается в том, что было заявлено, что формат пакетов должен выглядеть как следующее, где данные представлены в виде массива байтов максимальной длины = 64 КБ (предполагают IP -адрес представлены в 2 байтах):

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

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

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top