Я пытаюсь реализовать собственное сканирование 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 Bridge не возвращается в ответ.
Разве мост Philips Hue Bridge реализует UpNP по-разному, и все, что я вижу, - это ответ, который они отправляют обратно сейчас о том, что нужно для его поиска.
Спасибо