Как я могу реализовать простой многоадресный отправитель boost.asio? - PullRequest
1 голос
/ 29 апреля 2011

Я хочу использовать boost.asio для создания многоадресного UDP-отправителя.У меня есть тема, и я хочу использовать повышение только для:

  • сокета;

  • send ();

  • Обработка ошибок;

Можете ли вы что-нибудь предложить?

Ответы [ 2 ]

3 голосов
/ 19 мая 2011

Это относительно просто сделать.Вот базовый класс, который обрабатывает большинство всего, что вам нужно, используя синхронные вызовы:

#include <boost/asio.hpp>
#include <boost/scoped_ptr.hpp>

class MulticastSender
{
public:
   MulticastSender(const boost::asio::ip::address& multicast_addr,
      const unsigned short multicast_port)
         : ep_(multicast_addr, multicast_port)
   {
      socket_.reset(new boost::asio::ip::udp::socket(svc_, ep_.protocol()));
   }

   ~MulticastSender()
   {
      socket_.reset(NULL);
   }

public:
   void send_data(const std::string& msg)
   {
      socket_->send_to(
         boost::asio::buffer(msg.str()), ep_);
   }

private:
   boost::asio::ip::udp::endpoint                  ep_;
   boost::scoped_ptr<boost::asio::ip::udp::socket> socket_;
   boost::asio::io_service                         svc_;
};

Этот простой класс удовлетворяет 2 из 3 ваших требований (без обработки ошибок).Чтобы использовать его, просто создайте его экземпляр в соответствующем месте, и ваша реализация потока просто вызывает MulticastSender :: send_data () для отправки многоадресных данных в связанную конечную точку.

1 голос
/ 29 апреля 2011

Вы пробовали образцы?

<boost>\libs\asio\example\multicast\

Содержит образцы для

receiver.cpp
sender.cpp
...