首页 > 解决方案 > 多播丢弃大量消息

问题描述

我目前正在开发在办公环境中运行的服务,并且我目前正在尝试利用 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();

这应该是相当直截了当的,但显然我错过了一些东西。

任何帮助将不胜感激。

标签: androidnetworkingmulticast

解决方案


抱歉,但刚刚在另一块板上发现 Android 8 中存在一个已知问题,并且它们的多播支持已经存在了几个月 - 考虑到它是网络的一个基本组件,我希望他们能迅速修复它 - 它正在扼杀向客户部署我的服务。


推荐阅读