Многоадресное сообщение на том же хосте с использованием boost :: asio - PullRequest
4 голосов
/ 28 сентября 2011

Я реализую приложения отправителя / получателя для многоадресной передачи на одном хосте.

В моем конструкторе у меня есть следующий код для настройки сокета.

boost::asio::ip::udp::endpoint listenEndpoint(listenAddr, mcastPort);
m_socket.open(listenEndpoint.protocol());
m_socket.set_option(boost::asio::ip::udp::socket::reuse_address(true));
m_socket.set_option(boost::asio::ip::multicast::enable_loopback(true));
m_socket.set_option(boost::asio::ip::multicast::hops(1));
m_socket.bind(listenEndpoint);

// Join the multicast group
m_socket.set_option(boost::asio::ip::multicast::join_group(mcastAddr));

m_socket.async_receive_from(boost::asio::buffer(m_data, MAX_PTP_MSG_LENGTH),
        m_senderEndpoint, boost::bind(&PtpIpc::HandleReceiveFrom, this, 
        boost::asio::placeholders::error,
        boost::asio::placeholders::bytes_transferred));

Где listenAddr равно 0.0.0.0.

Мой код метода отправки выглядит следующим образом:

m_socket.async_send_to(boost::asio::buffer(data, size), m_remoteEndpoint,
    boost::bind(&PtpIpc::HandleSendTo, this,
    boost::asio::placeholders::error,
    boost::asio::placeholders::bytes_transferred));

Где m_remoteEndpoint - адрес многоадресной рассылки 224.0.1.129 и порт многоадресной рассылки 320.

Приложение A, похоже, не получаетмногоадресные сообщения из приложения B и наоборот, когда оба находятся на одном хосте.Но если я перенесу Приложение B на другую машину в той же подсети ... тогда Приложение A услышит многоадресное сообщение и ответит обратно в Приложение B, которое также может получить ответное сообщение от Приложения A. Я включил обратную связь и также установил сокетопция reuse_address.Чего мне не хватает?

1 Ответ

0 голосов
/ 25 апреля 2014

Что происходит при удалении петлевой опции.У меня была похожая проблема, и ее устранение устранило ее.

...