似乎是許多人都有的問題,但迄今爲止我找到的所有答案都無濟於事。使用增強庫收聽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權限的程序!
的幾點思考: 難道是可能的boost :: ASIO ::知識產權:: address_v4 ::任何()將不聽IP 。。*。255具有子網掩碼255.255.255.0時?
使用netcat時,也不會顯示數據。當我使用Windows netcat時,它工作得很好。與Linux和Windows上的Wireshark相同 - 工作正常。 試了一下,但效果相同 - 沒有數據。
應用程序是否向您發送多播數據?如果是這樣,請嘗試不綁定到監聽端點。 – Chad
你叫過io_service :: run()嗎?你只顯示了你的代碼片段,所以我必須問。 – Sean
@Sean io_service.run()在主函數中被調用。該程序在接收特定IP和特定端口上的數據時工作正常。但是當我試圖收聽廣播時沒有收到數據 –