UPnP宣布退出,但未发现设备

时间:2010-10-11 19:33:27

标签: network-programming upnp discovery

我正在为UPnP设备编写代码来宣布自己。我对它能够在网络上发现其他UPnP设备毫无兴趣。我发出以下消息(取自wireshark)

NOTIFY * HTTP/1.1\r\n
NT: upnp:rootdevice\r\n
USN: uuid:0000-1111-2222-3333::upnp:rootdevice\r\n
NTS: ssdp:alive\r\n
LOCATION: http://192.168.40.8:80/rdd2.xml\r\n
HOST: 239.255.255.250:1900\r\n
CACHE-CONTROL: max-age=900\r\n
Content-Length: 0\r\n
\r\n   

NOTIFY * HTTP/1.1\r\n
NT: urn:schemas-upnp-org:device:BinaryLight:1\r\n
USN: uuid:0000-1111-2222-3333::urn:schemas-upnp-org:device:BinaryLight:1\r\n
NTS: ssdp:alive\r\n
LOCATION: http://192.168.40.8:80/rdd2.xml\r\n
HOST: 239.255.255.250:1900\r\n
CACHE-CONTROL: max-age=900\r\n
Content-Length: 0\r\n
\r\n 

NOTIFY * HTTP/1.1\r\n
NT: uuid:0000-1111-2222-3333\r\n
USN: uuid:0000-1111-2222-3333\r\n
NTS: ssdp:alive\r\n
LOCATION: http://192.168.40.8:80/rdd2.xml\r\n
HOST: 239.255.255.250:1900\r\n
CACHE-CONTROL: max-age=900\r\n
Content-Length: 0\r\n
\r\n 

设备不会发现(在Win 7页面上,我看到我的其他UPnP设备或在英特尔设备间谍上用于UPnP技术 - 参见更新)。我有2个问题。首先,所有这些消息都是必要的吗?第二,谁能明白为什么我的设备不会被发现?

其他信息:

我的rdd2.xml设备描述文件

<?xml version="1.0"?>
<root>
  <specVersion>
    <major>1</major>
    <minor>0</minor>
  </specVersion>

<device>
    <deviceType>urn:schemas-upnp-org:device:BinaryLight:1</deviceType>
    <friendlyName>RFLC</friendlyName>
    <manufacturer>Legrand</manufacturer>
    <manufacturerURL>http://www.legrand.us/</manufacturerURL>
    <modelDescription>Legrand Low Cost RF Lighting Control</modelDescription>
    <modelName>X-10L1</modelName>
    <modelNumber>L1</modelNumber>
    <modelURL>http://www.legrand.us/</modelURL>
    <serialNumber>0000001</serialNumber>
    <UDN>uuid:0000-1111-2222-3333</UDN>
    <UPC>00000-00001</UPC>
    <presentationURL>pres.html</presentationURL>
  </device>
</root>

来自wireshark的一些信息(一个msgs帧列表的视图)
+框架.....
+ Ethernet II,Src:我的设备,Dst:239.255.255.250
+ Internet协议,Src端口:ssdp(1900),Dst端口:ssdp(1900)
- 超文本传输​​协议
......上面的消息来自......

更新:我 CAN 在intel的upnp实用程序上查看设备。写那个是个错误。设备在调试器下运行,一旦没有调试器重新启动,它就会在实用程序中发现DID。我仍然无法在Windows 7上看到它吗?有什么想法吗?

2 个答案:

答案 0 :(得分:1)

出于某种疯狂的原因,当我将此字段设置为具有额外空格时,我运气更好: CACHE-CONTROL:max-age = 900 \ r \ n

答案 1 :(得分:1)

看来SERVER:是必需的标题 - 我玩的至少一个客户端不喜欢没有SERVER的通知: