Embedded 用于设备发现的SSDP

Embedded 用于设备发现的SSDP,embedded,hardware,upnp,service-discovery,ssdp,Embedded,Hardware,Upnp,Service Discovery,Ssdp,我正在开发一个应该在Windows中自动发现的硬件设备,因此我更喜欢通过SSDP而不是MDN(Zeroconf等)来实现,以避免强制用户安装其支持应用程序。 我只需要设备出现在Windows资源管理器的网络中,然后单击它,使用URL中的设备IP地址打开默认浏览器。我已经编写了代码(在单播到多播M-SEARCH请求中应答,并在启动时和定期发送通知消息),我可以在Windows PC上的Wireshark中看到消息,但该设备仍然没有出现在explorer网络文件夹中,我可以看到其他设备,如打印机、电

我正在开发一个应该在Windows中自动发现的硬件设备,因此我更喜欢通过SSDP而不是MDN(Zeroconf等)来实现,以避免强制用户安装其支持应用程序。 我只需要设备出现在Windows资源管理器的网络中,然后单击它,使用URL中的设备IP地址打开默认浏览器。我已经编写了代码(在单播到多播M-SEARCH请求中应答,并在启动时和定期发送通知消息),我可以在Windows PC上的Wireshark中看到消息,但该设备仍然没有出现在explorer网络文件夹中,我可以看到其他设备,如打印机、电视、媒体播放器等,我也在Wireshark上看到了他们的信息。 我在notify和response消息的内容中搜索一些建议,也在xml文件中搜索这样一个简单设备的设备配置文件-我只想宣布该设备的IP地址上有一个Web服务器

以下是我要发送的信息:

在多播中:

NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900
CACHE-CONTROL: max-age=100
NT: upnp:rootdevice
USN: uuid:c5baf4a1-0c8e-44da-9714-ef0123411223::upnp:rootdevice
NTS: ssdp:alive
SERVER: NodeMCU/20150415 UPnP/1.1 xpto/0.1
Location: http://192.168.3.246/deviceprofile.xml
在单播中作为对M-SEARCH的答复:

HTTP/1.1 200 OK
Cache-Control: max-age=100
EXT:
SERVER: NodeMCU/20150415 UPnP/1.1 xpto/0.1
ST: upnp:rootdevice
USN: uuid:c5baf4a1-0c8e-44da-9714-ef0123411223
Location: http://192.168.3.246/deviceprofile.xml
deviceprofile.xml:

<?xml version='1.0'?>
<root xmlns='urn:schemas-upnp-org:device-1-0'>
<device>
<deviceType>urn:schemas-upnp-org:device:Basic:1</deviceType>
<presentationURL>http://192.168.3.246/</presentationURL>
<friendlyName>Remote control</friendlyName>
<manufacturer>xpto.com</manufacturer>
<manufacturerURL>http://xpto.com/</manufacturerURL>
<serialNumber>10275488</serialNumber>
<UDN>uuid:c5baf4a1-0c8e-44da-9714-ef0123411223</UDN>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:Basic:1</serviceType>
<serviceId>urn:upnp-org:serviceId:1</serviceId>
</service>
</serviceList>
</device></root>

urn:schemas upnp组织:设备:基本:1
http://192.168.3.246/
遥控器
xpto.com
http://xpto.com/
10275488
uuid:c5baf4a1-0c8e-44da-9714-ef0123411223
urn:schemas upnp组织:服务:基本:1
urn:upnp组织:serviceId:1
要使设备显示在windows资源管理器网络文件夹中,还需要其他什么吗

提前谢谢


Fernando

根据UPnP规范,您的
deviceprofile.xml
格式不正确。
标记下需要其他元素。另外,
urn:schemas-upnp-org:service:Basic:1
是非法的,您需要更改为upnp-pre-defined或在您自己的命名空间下自定义。例如:

<service>
    <serviceType>urn:schemas-upnp-org:service:XXXX:1</serviceType>
    <serviceId>urn:upnp-org:serviceId:1</serviceId>
    <SCPDURL>URL to service description.xml</SCPDURL>
    <controlURL>URL for control</controlURL>
    <eventSubURL>URL for eventing</eventSubURL> 
</service>

urn:schemas upnp组织:服务:XXXX:1
urn:upnp组织:serviceId:1
指向service description.xml的URL
控件的URL
事件的URL
您可以检查:的第2.3部分

我刚刚用节点发送的SSDP消息的内容更新了帖子。如果有必要,我也可以上传代码,我只关注SSDP消息的内容,因为我可以在Wireshark中看到到达windows PC的消息,具有正确的IP/端口-通过IP 239.255.255.250端口1900多播发送通知消息,这是对m-SEARCH消息的回复(在端口1900多播接收)以单播方式发送到M-SEARCH发送方,用于发送M-SEARCH消息的同一端口。这似乎与Windows相关,与“嵌入式设备”无关。我只能建议在具有最新内核的Linux机器上测试这一点,看看哪一方实际上拒绝合作。然而,我不能再帮你了-不知道(只是一些我保密的想法),但是现在你可能会有更好的机会得到合格的帮助。谢谢你的评论!我也不是windows人员,我更喜欢使用ZeroConf进行设备查找,但要求windows PC在不安装任何附加应用程序的情况下查找设备。我有相同的设备使用mDNS/ZeroConf,由Windows、Mac和Linux PC检测到,但必须在Windows.Ok中安装它的支持。你确定这个设备确实支持SSDP吗?如果您在Linux/Mac上有SSDP支持:它在那里工作吗?(无意冒犯-只是猜测,我甚至不知道SSDP实际上是什么。有时人们会忘记最明显的,直到有人问起。我自己也很清楚)我已经为嵌入式设备开发了SSDP实现,我正在检查一台支持SSDP的Windows PC。在PC中,我看到了其他通过SSDP发布广告的设备,如打印机、媒体设备等。我无法看到我实现的设备,但我看到消息是按照如上所述的标准到达的。是否Windows在资源管理器中仅显示特定类型的设备?