1. 程式人生 > >組播的時候到底該如何繫結網絡卡

組播的時候到底該如何繫結網絡卡

以前在程式碼中,遇到組播都是一直繫結0.0.0.0然後去把自己加入到組播組裡面去。但是最近的一次改動卻讓我發現了一個問題。

因為在顯示的環境中機器上會有很多網絡卡(>3)。 而我們指向接收其中一個子網中的組播中的資料,那麼很明顯的想法就是接收端繫結相應子網的IP。在windows環境中,我們綁定了機器上該子網的IP(例如:172.16.20.40)。實際測試的發現一切良好。然後在Linux環境中沿用了這個code。結果卻發現無論如何都收不到組播訊息。於是一陣瞎倒騰,發現在linux上繫結在組播組的地址上就可以收到訊息。暈,系統不一樣表現就是不一樣啊。但是事情並沒有結束,我並沒有弄清楚這是咋回事。查看了公司的包裝的程式碼發現在mutilcast client的實現上是按照Windows的設定來的。

  1. 建立UDP socket,繫結在一個網絡卡地址上
  2. 指定multiast group指定multiast group address,並且取出socket的本地地址,填入ip_mreq.imr_multiaddr和ip_mreq.imr_interface。

看起來一樣的東西在不同的系統下面可能是不一樣的,謹記,謹記.