我目前正在开发在办公环境中运行的服务,并且我目前正在尝试利用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();
这应该很简单,但是显然我缺少了一些东西。
任何帮助将不胜感激。
答案 0 :(得分:0)
道歉,但刚在另一块板上发现Android 8中存在一个已知问题,并且他们的多播支持已经存在了几个月(考虑到这是网络的基本组成部分,我希望他们能尽快解决它)这阻碍了我向客户提供服务的部署。