Android App用MulticastSocket監聽組播,為什麼串連到不通路由、在不同手機上跑,有的能收到有的收不到,組播不通

來源:互聯網
上載者:User

Android App用MulticastSocket監聽組播,為什麼串連到不通路由、在不同手機上跑,有的能收到有的收不到,組播不通

 

---------------------------!! 轉載請註明出處 !!----------------------- 

一個項目,利用wifi組播在區域網路內發現裝置。卻發現在有的路由器上能正常工作,有的路由器上完全監聽不到組播訊息。檢查路由配置沒有任何問題。

組播實現很簡單:拿住WifiLock,拿住MulticastLock,建立MulticastSocket連接埠1900,ttl設為3或者5,然後joinGroup加入239.255.255.250組,然後設定socket的timeout,調用receive開始監聽。還要記得manifest中加上幾個相關的permission。

網上可以搜到很多樣本,基本都是這樣的處理流程,沒什麼複雜的。

 

一開始測試時工作正常,由於用的是UPnP通用的組播ip (239.255.255.250:1900),所以可以收到區域網路裡很多組播訊息,包括MediaRenderer,InternetGateway等等,我們只要從中篩出自己的訊息就行了。

但小批量投放後,發現了問題。我們的產品在某些路由器上無法監聽到組播訊息。監聽連接埠上一片靜默,不僅我們自己的訊息收不到,網路中其他裝置發的組播訊息也收不到。

帶回3台有問題的路由,分別是 1) linksys,2) 華為,3) ARRIS

而國內的三台路由上工作卻是正常的,這三台分別是  4)小米,5) 華碩, 6)Cisco

找了另外三台android手機安裝同一個app做測試,三台手機:htc (android4.4.2),Sony (andorid4.1.2),華為(android5.0.2)

問題來了,htc和sony在6台路由上均能監聽到組播,華為榮耀7跟我們的裝置一樣,完全監聽不到。

*以上路由和手機就不標具體型號了^_^

----------------------------------------------------問題描述完畢,開始解決------------------------------------

WinPCap工具抓包發現,

兩台測試機htc和sony,在加入組播組(joinGroup)時,會發送IGMP V2 Membership Report / Join group 239.255.255.250離開組播組(leaveGroup)IGMP V2 Leave Group 239.255.255.250 有些支援IGMP V3的路由上抓包如下:IGMP V3 Membership Report / Join group 239.255.255.250 for any sourcesIGMP V3 Membership Report / Leave group 239.255.255.250

而出問題的手機(華為手機和我們自己的裝置),根本沒發IGMP包。

也就是表示,它們在加入組播組時,儘管在app總調用joinGroup成功,但實際上並未向路由器發出IGMP請求,即根本沒加入組播組,自然就監聽不到訊息。

那麼為什麼這兩台機器在小米,華碩,cisco路由上能正常監聽呢? 猜測這三台路由恐怕並沒有嚴格按照的UPnP協議來實現,猜測它可能給連在路由上的任何裝置發送組播(類似廣播一樣處理),裝置收到組播後,根據本地的配置情況決定是否發給app。由於沒有路由器實現的代碼,只是根據現象猜測。

至此,我們要解決的問題就是 讓它們發出IGMP包。

對華為手機,沒辦法了,不是我做的。。。

我們自己的裝置是有全部源碼的,調查發現linux kernel的config中 CONFIG_IP_MULTICAST 這項沒定義。

添加CONFIG_IP_MULTICAST=y, 重編kernel img後,再次抓包能抓到裝置發出的IGMP包了,實測問題解決。 這個問題調查過程中 發現在國內的網站上很少能搜到真正有協助的資訊,所以發這個文章,也許你的問題與我不一樣,但至少提供一個思路吧。 ---------------------------轉載請註明出處----------------------- 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.