android - 多播丢弃大量消息
问题描述
我目前正在开发在办公环境中运行的服务,并且我目前正在尝试利用 UPnP 来发现和管理该服务 - 将在 5 到 45 台设备上运行。在测试中,我使用了两台运行 Android 8.0.0 的三星设备。
广播地址 239.255.255.250 端口 1900
我正在运行 Wireshark,并且正在查看通过网络发送的所有消息。在我的应用程序中,我只收到几条消息,甚至这些消息也不是 Wireshark 的频率。
while (true)
{
try {
while (true)
{
buffer = new byte[1000];
dp = new DatagramPacket(buffer, buffer.length);
mcSocket.receive(dp);
String s = new String(dp.getData(), 0, dp.getLength());
InetAddress ia = dp.getAddress();
String hostAddress = ia.getHostAddress();
Log.e(TAG, "index= " + s);
if (s.contains("upnp:rootMaster"))
{
System.out.println();
}
}
}
catch (IOException ex)
{
Logger.getLogger(DLNASearchListener.class.getName()).log(Level.SEVERE, null, ex);
}
}
我可以看到我正在调试的设备生成的消息、来自其他设备的一些消息以及偶尔由我在其他设备上运行的服务生成的消息。
我确实运行多个 WiFi 网络,但是这两个设备都设置在同一个 SSID 上(这是未来关于桥接 SSID 的另一个问题)。
我尝试了一个多播程序,它似乎接收到更多的传输。
我已经尝试过 WiFi 锁定,但它并没有起到多大作用 - 设置后我没有收到任何东西。
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock multicastLock = wifi.createMulticastLock(masterService);
multicastLock.setReferenceCounted(true);
multicastLock.acquire();
这应该是相当直截了当的,但显然我错过了一些东西。
任何帮助将不胜感激。
解决方案
抱歉,但刚刚在另一块板上发现 Android 8 中存在一个已知问题,并且它们的多播支持已经存在了几个月 - 考虑到它是网络的一个基本组件,我希望他们能迅速修复它 - 它正在扼杀向客户部署我的服务。
推荐阅读
- reactjs - 如何正确存储我的 JWT 令牌并在 MERN 应用程序中返回数据
- mysql - MySQL 8.0 在大型数据集上的性能
- python - 有没有办法将数字格式应用于值或在通过数字格式处理后获取显示单元格的值?
- javascript - 如何避免在反应中重复类似的onclick事件
- javascript - TypeScript“记录”未定义
- google-play - Play 商店 - 有关已分发的选定国家/地区的错误
- python - 如何在 selenium Xpath python 中知道女巫的情况是真的
- reactjs - 我需要从选定值传递 id 以响应 Postgresql 中的另一个表(使用 sqlAlchemy)
- facebook - 是否可以使用 Facebook API 获取对特定网站的访问次数?
- python - 如何使用 python 生成 qr 代码并在扫描时打开定义的 url?