embedded - SSDP用于设备发现

标签 embedded hardware upnp service-discovery ssdp

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

这些是我要发送的消息:

在多播中:

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

设备配置文件.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>

为了使设备显示在 Windows 资源管理器网络文件夹中,还需要什么吗?

提前致谢

费尔南多

最佳答案

您的deviceprofile.xml根据 UPnP 规范,格式不正确。 <service>下需要其他元素标签。另外,urn:schemas-upnp-org:service:Basic:1不合法,需要改成UPnP预定义或者自己命名空间下自定义。一个例子可以是:

<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>

您可以检查:第2.3部分 http://upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf

关于embedded - SSDP用于设备发现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30668322/

相关文章:

gcc - 使用标准 GCC 编译 ARM Cortex M3?

design-patterns - 嵌入式系统的设计/实现模式

html - 嵌入式网络/应用服务器

hardware - 将软件编程与硬件编程相关联

linux - 使用 XGrabServer 抓取 X 服务器

c - Arduino 不同函数中具有两个值的全局变量

hardware - 将模块名称作为参数传递

java - 使用 Java 中的任何 UPnP 库进行简单端口转发的示例?

java - 通过使用 UPnP 发送广播数据包来发现路由器不起作用

UPnP 检测延迟