C++ 如何实现简单的boost.asio mulsticast发送器?
我想使用boost.asio创建一个多播UDP发送器。 我有一个我的线程,我只想将boost用于:C++ 如何实现简单的boost.asio mulsticast发送器?,c++,visual-studio-2005,udp,boost-asio,multicast,C++,Visual Studio 2005,Udp,Boost Asio,Multicast,我想使用boost.asio创建一个多播UDP发送器。 我有一个我的线程,我只想将boost用于: 插座 send() 错误处理 你能给点建议吗?你试过样品了吗 <boost>\libs\asio\example\multicast\ 你试过样品了吗 <boost>\libs\asio\example\multicast\ 这是相对容易实现的。下面是一个基本类,它可以处理使用同步调用所需的大部分内容: #include <boost/asio.hpp>
- 插座
- send()
- 错误处理
你能给点建议吗?你试过样品了吗
<boost>\libs\asio\example\multicast\
你试过样品了吗
<boost>\libs\asio\example\multicast\
这是相对容易实现的。下面是一个基本类,它可以处理使用同步调用所需的大部分内容:
#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_;
};
#包括
#包括
类多播发送器
{
公众:
多播发送器(const boost::asio::ip::地址和多播地址,
常量无符号短多播(U端口)
:ep(多播地址、多播端口)
{
socket.reset(新的boost::asio::ip::udp::socket(svc_,ep_.protocol());
}
~multicastssender()
{
插座复位(空);
}
公众:
无效发送数据(常量std::string和msg)
{
套接字->发送到(
boost::asio::buffer(msg.str()),ep_);
}
私人:
boost::asio::ip::udp::endpoint ep;
boost::作用域的ptr套接字;
boost::asio::io_服务svc;
};
这个简单的类满足3个需求中的2个(无错误处理)。要使用它,只需在适当的位置创建它的实例,线程实现只需调用MulticastSender::send_data()即可将多播数据发送到关联的端点。这相对来说比较容易实现。下面是一个基本类,它可以处理使用同步调用所需的大部分内容:
#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_;
};
#包括
#包括
类多播发送器
{
公众:
多播发送器(const boost::asio::ip::地址和多播地址,
常量无符号短多播(U端口)
:ep(多播地址、多播端口)
{
socket.reset(新的boost::asio::ip::udp::socket(svc_,ep_.protocol());
}
~multicastssender()
{
插座复位(空);
}
公众:
无效发送数据(常量std::string和msg)
{
套接字->发送到(
boost::asio::buffer(msg.str()),ep_);
}
私人:
boost::asio::ip::udp::endpoint ep;
boost::作用域的ptr套接字;
boost::asio::io_服务svc;
};
这个简单的类满足3个需求中的2个(无错误处理)。要使用它,只需在适当的位置创建它的实例,线程实现只需调用MulticastSender::send_data()即可将多播数据发送到关联的端点。您到底遇到了什么问题?你能发布一些到目前为止你已经尝试过的代码吗?你到底有什么问题?你能发布一些到目前为止你已经尝试过的代码吗?我见过多播发送器的例子,但可能不是我需要的。我现在有了自己的线程(我必须使用线程的这个实现)。我只想对套接字使用boost:如果我看到发送器,我知道有一些异步的东西:你可以使用一些线程吗?我注意到:void handle\u send\u to(const boost::system::error\u code&error);无效句柄超时(const boost::system::error\u代码和错误);是否可以使用同步套接字?@GgSalent我不清楚您在评论中提出了什么问题。也许试着澄清你原来的问题,或者问一个新问题?我见过多播发送者的例子,但也许不是我需要的。我现在有了自己的线程(我必须使用线程的这个实现)。我只想对套接字使用boost:如果我看到发送器,我知道有一些异步的东西:你可以使用一些线程吗?我注意到:void handle\u send\u to(const boost::system::error\u code&error);无效句柄超时(const boost::system::error\u代码和错误);是否可以使用同步套接字?@GgSalent我不清楚您在评论中提出了什么问题。也许试着澄清你原来的问题,或者问一个新问题?这不会编译,msg.str()是错误的,即使它是c_str(),它也不能与send_to()一起工作。这不会编译,msg.str()是错误的,即使它是c_str(),它也不能与send_to()一起工作。