2011-09-27 17 views
3

Boost :: Asio를 처음 사용합니다. 동일한 호스트에서 멀티 캐스트를 사용하도록 보낸 사람 /받는 사람 응용 프로그램을 구현하고 있습니다.동일한 호스트에서 boost :: asio를 사용하는 멀티 캐스트 메시지

제 생성자에서 소켓을 설정하는 데 다음 코드가 있습니다.

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_remoteEndpoint 멀티 캐스트 주소 224.0.1.129 320

응용 프로그램 A는 응용 프로그램 B와의 멀티 캐스트 메시지를 수신하지 않는 것 muticast 포트

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)); 

둘 다 동일한 호스트에있을 때도 마찬가지입니다. 그러나 응용 프로그램 B를 동일한 서브넷의 다른 컴퓨터로 이동하면 응용 프로그램 A는 멀티 캐스트 메시지를 듣고 응용 프로그램 B에 회신합니다. 응용 프로그램 B는 또한 응용 프로그램 A에서 회신 메시지를받을 수 있습니다. 루프백을 활성화했으며 소켓도 설정했습니다 reuse_address 옵션. 내가 뭘 놓치고 있니?

+0

이 동작은 매우 일반적입니다. 필자는 Tru64 Unix와 같은 완전히 다른 OS에서도이를 보았습니다. 어떤 OS를 사용하고 있습니까? –

+0

@Ben Linux 커널 2.6.29를 사용하여 Timesys에서 개발 중입니다. 감사! –

+0

응용 프로그램 A와 B가 모두 멀티 캐스트 그룹에 가입하고 있으며 그룹과 송수신을하고 있습니까? 또한, 멀티 캐스트 그룹으로부터 수신 할 때와 그룹에 보낼 때 각각 소켓을 가지고 있습니까? –

답변

0

루프백 옵션을 제거하면 어떻게됩니까? 나는 비슷한 문제를 가지고 그것을 고정 제거.

관련 문제