簡體   English   中英

在同一端口上綁定兩個多播套接字

[英]Binding two multicast sockets on the same port

我正在嘗試從同一台計算機上的兩個不同進程中加入兩個不同的多播組:

  • 進程A加入224.1.1.100端口10000
  • 進程B嘗試加入224.1.1.101端口10000

進程A從224.1.1.100:10000獲取數據就好了。

問題是進程B沒有從224.1.1.101:10000接收流量-而是從進程A的聯接接收流量(224.1.1.100:10000)

這兩個進程的基礎代碼使用的是Boost Asio。 每個進程都將套接字打開到同一端口10000。但是,每個進程都將聯接發送到單獨的多播組(進程A至224.1.1.100,進程B至224.1.1.101)。

關鍵問題似乎是兩個進程將套接字打開到同一端口。 鑒於必須偵聽兩個多播組(224.1.1.100和224.1.1.101)上的相同端口,我該如何進行這項工作?

流程示例代碼:


listenInterface( boost::asio::ip::address::from_string( "0.0.0.0" ) ),
localEndpoint = boost::asio::ip::udp::endpoint( listenInterface, 10000 );
socket.bind( localEndpoint );
socket.set_option( boost::asio::ip::multicast::join_group( boost::asio::ip::address::from_string( "224.1.1.100" ) ) );

流程B示例代碼:


listenInterface( boost::asio::ip::address::from_string( "0.0.0.0" ) ),
localEndpoint = boost::asio::ip::udp::endpoint( listenInterface, 10000 );
socket.bind( localEndpoint );
socket.set_option( boost::asio::ip::multicast::join_group( boost::asio::ip::address::from_string( "224.1.1.101" ) ) );

我想到了。 根本原因不是在兩個進程之間使用唯一的listenInterface。 通過將綁定上使用的listenInterface切換到本地端點,我可以使它工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM