boost.asio를 사용하여 멀티 캐스트 UDP 발신자를 만들고 싶습니다. 나는 내 스레드를하고 난 단지에 대한 부스트를 사용하려면 :간단한 boost.asio mulsticast 보낸 사람을 어떻게 구현할 수 있습니까?
소켓;
send();
오류 처리;
뭔가 제안 할 수 있습니까?
boost.asio를 사용하여 멀티 캐스트 UDP 발신자를 만들고 싶습니다. 나는 내 스레드를하고 난 단지에 대한 부스트를 사용하려면 :간단한 boost.asio mulsticast 보낸 사람을 어떻게 구현할 수 있습니까?
소켓;
send();
오류 처리;
뭔가 제안 할 수 있습니까?
샘플을 사용해 보셨습니까?
<boost>\libs\asio\example\multicast\
는 이것이 달성 비교적 간단
receiver.cpp
sender.cpp
멀티 캐스트 발신자의 예를 보았지만, 아마도 이 필요하지 않습니다. 이제는 내 스레드가 있습니다 (이 구현을 스레드로 사용해야합니다). 나는 소켓을 위해서만 부스트를 사용하고 싶다 : 나는 무언가가 있다는 것을 알고 있기 때문에 보낸 사람을 보면 비동기식이다 : 어떤 쓰레드를 사용할 수 있는가? 눈치 채 셨습니다 : void handle_send_to (const boost :: system :: error_code & error); void handle_timeout (const boost :: system :: error_code & error); 동기식 소켓을 사용할 수 있습니까? – Safari
@GgSalent 귀하의 의견에 귀하가 무엇을 요구하고 있는지 분명하지 않습니다. 원래 질문을 명확히하거나 새로운 질문을 시도해보십시오. –
대해을 sampples를 포함한다. 다음은 동기 호출을 사용하여 필요한 모든 것을 처리하는 기본 클래스입니다.
#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_;
};
이 간단한 클래스는 3 가지 요구 사항 중 2 가지 (오류 처리 없음)를 충족합니다. 그것을 사용하려면, 적절한 장소에 인스턴스를 생성하기 만하면, 스레드 구현은 MulticastSender :: send_data()를 호출하여 멀티 캐스트 데이터를 연관된 엔드 포인트에 전송합니다.
이것은 컴파일되지 않으며 msg.str()은 잘못되었으며 c_str() 인 경우에도 send_to()에서는 작동하지 않습니다. – easytiger
정확히 어떤 문제가 있습니까? 지금까지 시도한 코드를 게시 할 수 있습니까? –