Có vẻ là một vấn đề mà nhiều người có, nhưng tất cả các câu trả lời tôi đã tìm thấy cho đến nay vẫn không giúp được gì.Lắng nghe phát sóng udp với thư viện tăng cường
Sự cố: Tôi đang cố gắng nghe một Velodyne HDL32 gửi gói dữ liệu qua UDP tới máy của tôi. Hệ điều hành là thư viện Ubuntu và Boost 32 bit v1.46.
Các dữ liệu tôi nhận được qua Wireshark trông như thế này:
Time | Source | Destination | Protocol | Length | Source Port | Destination Port
0.000000 | 192.168.17.212 | 192.168.3.255 | UDP | 1248 | https | opentable
Nhưng với mã này, không có dữ liệu được hiển thị với tôi (Port là đúng):
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));
}
bất cứ ai có thể xác định một vấn đề cho đến nay hay bạn cần thêm thông tin? Tôi đánh giá cao bất kỳ trợ giúp nào tôi có thể nhận được.
LƯU Ý: Tôi KHÔNG chạy chương trình có đặc quyền root!
Vài suy nghĩ: Nó có thể được có thể là tăng :: ASIO :: ip :: address_v4 :: bất kỳ() sẽ không lắng nghe những IP .. *. 255 khi có subnetmask 255.255.255.0?
Khi sử dụng netcat, không có dữ liệu nào được hiển thị. Khi tôi sử dụng Windows netcat nó hoạt động khá tốt. Tương tự với Wireshark trên Linux và Windows - hoạt động tốt. Đã thử với nó, nhưng với cùng một hiệu ứng - không có dữ liệu.
Ứng dụng có gửi dữ liệu Multicast cho bạn không? Nếu vậy, hãy thử mà không ràng buộc với điểm cuối nghe. – Chad
Bạn có gọi io_service :: run() không? Bạn đã chỉ hiển thị một đoạn mã của bạn vì vậy tôi phải hỏi. – Sean
@Sean io_service.run() được gọi trong hàm chính. Chương trình hoạt động tốt khi nhận dữ liệu trên một IP cụ thể và một cổng cụ thể. Nhưng không có dữ liệu nào được nhận khi tôi cố gắng nghe phát sóng –