2011-04-29 3 views

답변

1

샘플을 사용해 보셨습니까?

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

는 이것이 달성 비교적 간단

receiver.cpp 
sender.cpp 
+0

멀티 캐스트 발신자의 예를 보았지만, 아마도 이 필요하지 않습니다. 이제는 내 스레드가 있습니다 (이 구현을 스레드로 사용해야합니다). 나는 소켓을 위해서만 부스트를 사용하고 싶다 : 나는 무언가가 있다는 것을 알고 있기 때문에 보낸 사람을 보면 비동기식이다 : 어떤 쓰레드를 사용할 수 있는가? 눈치 채 셨습니다 : void handle_send_to (const boost :: system :: error_code & error); void handle_timeout (const boost :: system :: error_code & error); 동기식 소켓을 사용할 수 있습니까? – Safari

+0

@GgSalent 귀하의 의견에 귀하가 무엇을 요구하고 있는지 분명하지 않습니다. 원래 질문을 명확히하거나 새로운 질문을 시도해보십시오. –

3

대해을 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()를 호출하여 멀티 캐스트 데이터를 연관된 엔드 포인트에 전송합니다.

+0

이것은 컴파일되지 않으며 msg.str()은 잘못되었으며 c_str() 인 경우에도 send_to()에서는 작동하지 않습니다. – easytiger

관련 문제