Кажется, проблема у многих людей, но все ответы, которые я нашел до сих пор, не помогли.Прослушивание udp-трансляции с помощью библиотеки ускорения
Проблема: Я пытаюсь слушать Velodyne HDL32, который посылает свои пакеты через UDP на моем компьютере. ОС - это 32-разрядная библиотека Ubuntu и Boost v1.46.
данные я получаю с помощью Wireshark выглядит следующим образом:
Time | Source | Destination | Protocol | Length | Source Port | Destination Port
0.000000 | 192.168.17.212 | 192.168.3.255 | UDP | 1248 | https | opentable
Но с этим кодом, никаких данных не показал мне (порт правильно):
receiver(boost::asio::io_service& io_service,
const boost::asio::ip::address& listen_address)
: m_socket(io_service)
{
boost::asio::ip::address ipAddr = boost::asio::ip::address_v4::any();
boost::asio::ip::udp::endpoint listen_endpoint(
ipAddr, 2368);
m_socket.open(listen_endpoint.protocol());
m_socket.bind(listen_endpoint);
m_socket.async_receive_from(
boost::asio::buffer(m_data, max_length), m_sender_endpoint,
boost::bind(&receiver::handle_receive_from, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
void handle_receive_from(const boost::system::error_code& error,
size_t bytes_recvd)
{
std::cout << "receive" << bytes_recvd << std::endl;
m_socket.async_receive_from(
boost::asio::buffer(m_data, max_length), m_sender_endpoint,
boost::bind(&receiver::handle_receive_from, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
Можно ли определить проблему или вам нужна дополнительная информация? Я ценю любую помощь, которую я могу получить.
ПРИМЕЧАНИЕ: Я НЕ запускаю программу с привилегиями root!
Некоторые мысли: Может быть возможно, что повышение :: ASIO :: IP :: address_v4 :: любой() не будет слушать IP .. *. 255 когда есть подсетьмаска 255.255.255.0?
При использовании netcat данные не отображаются. Когда я использую Windows netcat, он работает отлично. То же самое с Wireshark в Linux и Windows - отлично работает. Пробовал это также, но с тем же эффектом - никаких данных.
Действительно ли приложение отправляет вам многоадресные данные? Если это так, попробуйте без привязки к конечной точке прослушивания. – Chad
Вы назвали io_service :: run()? Вы только показали фрагмент своего кода, поэтому я должен спросить. – Sean
@Sean io_service.run() вызывается в основной функции. Программа работает нормально при получении данных на конкретном IP-адресе и конкретном порту. Но никакие данные не получены, когда я пытаюсь прослушать широковещательную передачу. –