多くの人が抱えている問題のようですが、これまでに見つけたすべての答えは役に立ちませんでした。
問題: UDP 経由で PC にパケットを送信する Velodyne HDL32 をリッスンしようとしています。OS は 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::ip::address_v4::any() が IP をリッスンしない可能性があります。.*.255 サブネットマスクが 255.255.255.0 の場合?
netcat を使用すると、データも表示されません。Windows netcat を使用すると、問題なく動作します。Linux および Windows の Wireshark と同じ - 正常に動作します。も試してみましたが、同じ効果がありました - データはありません。