---------------------------!! 转载请注明出处 !!-----------------------

一个项目,利用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 sources
IGMP 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包了,实测问题解决。
这个问题调查过程中 发现在国内的站点上很少能搜到真正有帮助的信息,所以发这个帖子,也许你的问题与我不一样,但至少提供一个思路吧。
---------------------------转载请注明出处-----------------------

转载于:https://www.cnblogs.com/inkheart0124/p/5508420.html

Android App用MulticastSocket监听组播,为什么连接到不同路由、在不同手机上跑,有的能收到有的收不到...相关推荐

  1. Android APP 检测和监听当前USB设备插入拔出以及读取VID/PID

    一.列出所有的usb device设备,打印vip pid private boolean AllDeviceConnected(){UsbManager manager = (UsbManager) ...

  2. Android通过使用系统广播监听网络状态的改变

    Android通过使用广播监听网络状态的改变 得先添加权限 //查看网络状态<uses-permission android:name="android.permission.ACCE ...

  3. Android对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果

    Android对ScrollView滚动监听,实现美团.大众点评的购买悬浮效果 转:http://blog.csdn.net/xiaanming/article/details/17374599 很荣 ...

  4. Android学习按键事件监听与Command模式

    Android学习按键事件监听与Command模式 - Dufresne - 博客园 Android学习按键事件监听与Command模式 一 Command模式 意图: 将一个请求封装为一个对象,从而 ...

  5. android列表项点击事件,Android 开发 tips(2):监听 Listview 列表项点击事件

    Android 开发 tips(2):监听 Listview 列表项点击事件 (这篇和上篇本来是应该一起写的,但是太过冗长,附链接:[SimpleAdapter 在 Listview 中的应用] ht ...

  6. android 10.0 监听Soft Ap热点连接与断开

    1.概述 在10.0的系统产品开发中,在定制化银行设备时,需要设备开机后打开热点,然后监听顾客连接设备和断开设备 那么SoftApManager.java 就主要负责热点连接的管理,就需要分析它的相关 ...

  7. Android截屏事件监听

    1. 前言 Android系统没有直接对截屏事件监听的接口,也没有广播,只能自己动手来丰衣足食,一般有三种方法. 利用FileObserver监听某个目录中资源变化情况 利用ContentObserv ...

  8. Android系统截屏监听工具

    Android系统截屏监听工具 做系统截屏通知的时候,找了很多资料,测试后发现要做挺多机型适配的,而且有时候会没有监听到,有时候又监听到多次,不能实现想要的效果.一下是最终的解决方案,已在足够多的手机 ...

  9. Android的Menu键监听

    Android的Menu键监听 其实想实现的目的很简单,按下Menu键的时候,在Activity中把一个值设置成true,同时弹出菜单,菜单消失的时候再把这个值设成false.搞来一个多小时,其实很简 ...

最新文章

  1. 基于Python的验证码识别技术
  2. SqlDataReader生成动态Lambda表达式
  3. 浅析Web2.0技术
  4. 简洁的描述SpringMVC工作流程
  5. View和ViewGroup常用方法
  6. 一主两从的环境,如果主库挂了,如何选举一个从库作为主库?
  7. vue使用axios并存数据到state
  8. fscanf不读取_思考了一天,终于把matlab的fscanf中的sizeA搞清楚了
  9. 标题在图表上_Excel 2010基础应用:图表的创建与编辑
  10. python矩阵赋值提高速度_Numpy大规模矩阵运算优化加速技巧
  11. 各种协议在RFC中的编号
  12. oracle 插入n字母,Nhibernate在oracle批量插入失败,求解?
  13. Java中Link,set 和Map的区别,ArrayList,HashSet和HashMap的区别。
  14. 接口和一些抽象类的区别
  15. 如何查看端口是否开启
  16. L TEXT和 _T的区别
  17. 荣耀手机怎么使用鸿蒙系统,荣耀供应链6月全面恢复,安卓系统依然是第一选择,鸿蒙只是备选...
  18. SHINE OPENCART 自适应 多用途主题模板 ABC-0021
  19. 【Cocos2d-x游戏引擎开发笔记(13)】Tiled Map Editor(一)
  20. 如何保证数据在传输过程中的安全

热门文章

  1. android下拉刷新和上拉加载的一个简单库
  2. u盘安装Fedora18
  3. 白话 Session 与 Cookie:从经营杂货店开始
  4. Redis:MySQL算老几?
  5. 利用Comet4J 及时推送消息
  6. linux配置接口多地址,Linux /etc/network/interfaces配置接口方法
  7. 节点图一般的比例_基于图的异常检测(二):LOCKINFER
  8. harmonyos 2.0怎么升级,HarmonyOS 2.0正式发布 分布式能力获得全面升级
  9. 上海的互联网数据中心“一柜难求
  10. android获取小程序音频时长,最新微信小程序获取音频时长与实时获取播放进度...