我正在尝试实现我自己的 UpNP 扫描,它大部分都在工作,并且为了证明不是我,我有一个 Windows 程序,它允许您发送数据包并查看返回的响应。
我正在向239.255.255.250
端口发送数据包,1900
并且正在发送以下数据:
M-SEARCH * HTTP/1.1
Host: 239.255.255.250:1900
Man: "ssdp:discover"
MX: 10
ST: ssdp:all
只是为了获取更多信息,在我的 Java 代码(Android)中,我有以下内容,但我得到了与数据包测试器应用程序相同的响应:
try
{
byte[] sendData = new byte[1024];
//byte[] receiveData = new byte[1024];
byte[] receiveData;
String mSearch = "M-SEARCH * HTTP/1.1\r\nHost: 239.255.255.250:1900\r\nMan: \"ssdp:discover\"\r\nMX: 10\r\nST: ssdp:all\r\n\r\n";
sendData = mSearch.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, InetAddress.getByName("239.255.255.250"), 1900);
DatagramSocket clientSocket = new DatagramSocket();
clientSocket.send(sendPacket);
while (keepGoing)
{
receiveData = new byte[1024];
receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String response = new String(receivePacket.getData());
if (response == null || response.length() == 0)
{
keepGoing = false;
}
else
{
iupnpScan.updateText(response);
}
}
iupnpScan.complete(true);
return true;
}
catch (UnknownHostException ex)
{
Log.e("MainActivity", "Unknown Host Exception: " + ex.toString());
}
catch (SocketException ex)
{
Log.e("MainActivity", "Socket Exception: " + ex.toString());
}
catch (IOException ex)
{
Log.e("MainActivity", "IO Exception: " + ex.toString());
}
iupnpScan.complete(false);
return false;
我收到了一些设备,例如我的智能电视、路由器和 NAS,但飞利浦 Hue 桥接器从未在回复中返回。
飞利浦 Hue Bridge 是否以不同的方式实施 UpNP?我所能看到的只是他们现在发回的关于找到它所需的任何响应。