У меня есть встроенное устройство в моей локальной сети и приложение С++ в Linux на компьютере. Я сделал широковещательную рассылку UDP по своему широковещательному адресу подсети с C++, и мое устройство вернуло сообщение с подписью. У них обоих теперь есть IP-адреса друг друга. Мне нужно отправить UDP-пакет с моего С++ специально на IP-адрес моего устройства. Первоначальный вызов моего устройства был выполнен через UDP, но он использовал опцию широковещательной передачи в параметрах сокета. Некоторые из моих экспериментов с инструментами генерации пакетов создали впечатление, что UDP использует MAC ID для поиска пункта назначения. Итак, каким должен быть метод в С++, если я хочу отправить пакет UDP на мой конкретный IP-адрес в моей локальной сети? Спасибо
UDP-пакет на определенный IP-адрес в локальной сети
Ответы (3)
Судя по вашему ответу на stefaanv, ваш вопрос действительно звучит так: «Как мне получить IP-адрес из потока A в поток B?», Где поток A получает ответ на широковещательное сообщение, а поток B выполняет специфичные для устройства коммуникация.
Один из способов сделать это — создать поток B из потока A и передать IP-адрес в качестве аргумента функции потока B. Таким образом, поток B с самого начала будет знать, с каким IP-адресом разговаривать.
Если поток B должен быть запущен и запущен до потока A, вы можете поделиться IP-адресом с помощью глобальной переменной и использовать, например. семафор, чтобы поток A мог сообщить потоку B, когда он установил IP-адрес. Просто убедитесь, что поток A является единственным потоком, который записывает эту глобальную переменную, иначе вам придется настроить другой уровень синхронизации, например. используя мьютекс, чтобы убедиться, что запись на IP-адрес выполняется только одним потоком за раз.
Если вы отправляете широковещательную рассылку и ожидаете ответов по UDP, вы должны получить их с recvfrom позвонить. Это заполняет адрес отправителя. Соответствующий вызов для отправки UDP с полученной адресной информацией — sendto.
Вы не указали O/S, но...
Вы можете сделать так, чтобы сокет UDP использовал connect, если хотите. Затем это означает, что дальнейшие отправки в этот сокет будут идти на IP-адрес, к которому вы «подключились», и все это, несмотря на то, что UDP не устанавливает соединение.
boost::asio
? - person Geoffroy   schedule 02.07.2013