私は情報を収集し、ローカルネットワークを介していくつかのメッセージをブロードキャストするサーバーを持っています。私はboost::asio
を使用してUDP経由でこれらのパケットをポート8079にブロードキャストし、WireSharkでこれらのパケットが実際に意図したとおりにブロードキャストされていることを確認できます。boost :: asioでUDPポートを聞くことに失敗しました
自然に、私はこれらのメッセージに反応するリスナーにフォローアップしたいと思いますが、私は何かを受け取るのに苦労しています。私の現在のアプローチは:
boost::asio::io_service io_service;
boost::asio::ip::udp::socket socket(io_service);
boost::asio::ip::udp::endpoint local(
boost::asio::ip::address::from_string("192.168.2.102"),
8079);
boost::system::error_code error;
std::cout << "Local bind: " << local << std::endl;
socket.open(boost::asio::ip::udp::v4(), error);
if(!error) {
socket.bind(local);
boost::array<char, 2048> buf;
boost::asio::ip::udp::endpoint server;
std::cout << "Listening..." << std::endl;
while(true) {
size_t len = socket.receive_from(boost::asio::buffer(buf), server);
std::cout << "Received data:" << std::endl;
std::cout.write(buf.data(), len);
std::cout << std::endl;
}
}
私は何も受け取っていません。デバッガを使用して、私はちょうどreceive_from
に詰め込まれていることがわかりました。なぜか分かりません。
これらの問題を引き起こす可能性があるかどうかわからない情報(主にWiresharkから):サーバーとクライアントが同じマシンで実行されています。サーバーは88 bytes
メッセージをポート34050
(送信元)から8079
(送信先)に2秒ごとに送信しています。 192.168.2.102
は、ローカルネットワーク内のマシンのIPです。
ローカルエンドポイントアドレスに「0.0.0.0」または「ip :: address_v4 :: any」を試してください。 –
受信機は特定のネットワークインターフェースにバインドする必要がありますか? –
@Emile Cormier 'ip :: address_v4 :: any()'は、 '0.0.0.0:8079'にバインドされている以外は何も変更しません。あなたの2番目の質問に関しては、あなたが聞きたいポートを指定するために 'bind'が必要だと思います。私が間違っている? – nijansen