2011-09-27 20 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_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)); 

哪裏m_remoteEndpoint是組播地址224.0.1.129和muticast端口320

應用程序A似乎不接收來自應用程序B和多播消息反之亦然,當兩者都在同一主機上時。但是,如果我將應用程序B移動到同一子網上的另一臺機器上,則應用程序A會聽到多播消息並回復給應用程序B,該應用程序B也可以接收來自應用程序A的應答消息。我已啓用回送並設置套接字reuse_address選項。我錯過了什麼?

+0

這種行爲很常見;我也看到了完全不同的操作系統,如Tru64 Unix。你在使用什麼操作系統? –

+0

@Ben我正在使用Linux內核2.6.29在Timesys下開發。謝謝! –

+0

應用程序A和B都加入了多播組,並且發送和接收來自/從該組?另外,你是否有單獨的套接字用於接收來自多播組而不是發送到組? –

回答

0

當您刪除環回選項時會發生什麼情況。我遇到了類似的問題,並刪除了修復它。