Parece ser un problema que muchas personas tienen, pero todas las respuestas que he encontrado hasta ahora no ayudaron.Escuchando una transmisión udp con la biblioteca de impulso
Problema: Estoy tratando de escuchar un Velodyne HDL32 que envía sus paquetes por UDP a mi pc. El sistema operativo es la biblioteca Ubuntu y Boost v1.46 de 32 bits.
Los datos que consigo a través de Wireshark es el siguiente:
Time | Source | Destination | Protocol | Length | Source Port | Destination Port
0.000000 | 192.168.17.212 | 192.168.3.255 | UDP | 1248 | https | opentable
Pero con este código, los datos no se muestra a mí (puerto es correcta):
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));
}
¿Alguien puede identificar un problema hasta ahora o ¿necesita más información? Agradezco cualquier ayuda que pueda obtener.
NOTA: ¡NO estoy ejecutando el programa con privilegios de administrador!
Algunos pensamientos: ¿Podría ser posible que asio impulso :: :: :: ip address_v4 :: cualquier() no escuchar la IP .. *. 255 al tener subred 255.255.255.0?
Al usar netcat, no se muestran datos también. Cuando uso Windows netcat funciona bastante bien. Lo mismo con Wireshark en Linux y Windows, funciona bien. Lo intenté con el también, pero con el mismo efecto, sin datos.
¿La aplicación le está enviando datos de multidifusión? Si es así, intente sin enlazar con el punto final de escucha. – Chad
¿Ha llamado a io_service :: run()? Solo has mostrado un fragmento de tu código, así que tengo que preguntar. – Sean
@Sean io_service.run() se llama en la función principal. El programa funciona bien cuando se reciben datos en una dirección IP específica y un puerto específico. Pero no se reciben datos cuando trato de escuchar la transmisión –