Bre*_*and 16 android multicast jmdns
有没有人在Android 2.2上使用Multicast,特别是用于Bonjour服务检测的JmDNS.Android 1.5-> 2.0时间帧有很多问题和答案,包括stackOverflow,表明不同程度的成功,以及错误跟踪器中的错误,表明它已修复并关闭,为2.2(http://代码.google.com/p/android/issues/detail?id = 2323).我已经尝试了"TuneControl"源代码,但是这个工作在~1.5并且还没有更新,并且在2.2上对我不起作用.
那么,问题...... 1)有没有人看到2.2上的多播工作,特别是JmDNS,特别是Bonjour服务检测?
2)代码中有什么必要使这项工作?
我正在使用适当的权限:
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
Run Code Online (Sandbox Code Playgroud)
我获得了多播锁:
WifiManager wifi = (WifiManager)getSystemService( Context.WIFI_SERVICE );
if(wifi != null)
{
MulticastLock mcLock = wifi.createMulticastLock("mylock");
mcLock.acquire();
...
Run Code Online (Sandbox Code Playgroud)
然后尝试启动jmDNS以查找服务器:
mdns = JmDNS.create(addr, HOSTNAME);
jmdns.addServiceListener(TOUCH_ABLE_TYPE, listener);
jmdns.addServiceListener(DACP_TYPE, listener);
...
Run Code Online (Sandbox Code Playgroud)
听众永远不会看到任何服务.我已经使用Wireshark验证了请求数据包是否已发送,服务器是否响应,但jmDNS库中的套接字侦听器代码从未看到响应数据包.
所以...我错过了什么?这仍然是一个错误吗?有没有人得到任何东西甚至远程像这样工作???
Bre*_*and 13
为了(粗鲁地)回答我自己的问题,另一个人在http://code.google.com/p/android/issues/detail?id=2917#c48上提供了更多信息.对于后代,正如他们所说,这里是brian.ro ... @ gmail.com的回答......
"我花了很多时间在我的Evo和HTC Hero(CDMA)上用JmDNS调试mDNS问题.我发现在Evo上的broadcom无线驱动程序中似乎有一个过滤器(因为我'我从HTC Desire用户那里得到一个类似的故事 - 使用相同的芯片组,大概也就是那个手机.默认情况下,过滤器阻止任何非单播或网络广播流量,包括多播.显然理论上它是节电器.
问题似乎是Evo上的wpa_supplicant不支持在获得MulticastLock时删除这些过滤器.(获得锁定后立即检查日志输出,你会明白我的意思).不幸的是,硬件供应商已经支离破碎的多播支持...... :("
所以...看起来这是一个设备问题而不是编码问题.D'哦.:(如果我有机会在另一台设备上测试......
我一直在对此进行一些研究,我认为这是一般的Android问题,并在Android 2.3.7中或周围修复.
这有点太轶事了,但这是我测试的:
当我说'失败'时,实际上他们都能够向'成功'设备发送多播消息,但除了他们自己的消息之外从未收到任何回复 - 正如jldupont所描述的那样.
请注意,多播IM应用程序Kouchat仅适用于2.3.7以后,即使它可以在2.1之前进行编译,这进一步证实了这一理论.
| 归档时间: |
|
| 查看次数: |
17593 次 |
| 最近记录: |