【发布时间】:2014-04-18 19:03:51
【问题描述】:
正在使用设备并希望支持零配置功能。这样,用户可以在网络上查找设备,只需双击图标即可访问 Web 界面,而无需对其进行配置或知道其 IP 地址。
尝试使用 UPNPLib_TLB 但函数似乎是只读的;我对吗?我可以使用 CoUPnPDevice.Create 创建设备,但无法设置 FriendlyName 或 URL。
尝试使用Deltics Bonjour service,但它在创建时崩溃 (ACCESS_VIOLATION)。演示代码使用了一个自定义测试单元,这使实验变得复杂。
经过大量研究,似乎没有可用的组件,希望得到一些指导。有没有人通过 UPnP 或使用 Delphi XE2/5 的 Bonjour 成功创建了 zeroconf 广播。如果需要,我可以回到 Delphi 7。目标 = Windows 7。
注意:需要明确的是,我可以在网络上找到现有设备并且不想枚举现有设备,但我想要的是广播我的服务,以便我的盒子表现得像网络打印机。我需要公开的唯一服务是 URL,以便用户可以访问嵌入式 Web 服务器。
感谢您的帮助!
编辑 根据提供的提示,我做了一些研究,但不可能以 RAD 方式完成。
直接使用 MS API 非常耗时,并且需要对 C 有一定程度的理解,而我没有。将 Delphi 5/Indy 7 组件移植到 XE2/5 需要大量的工作和调试。
我发现来自英特尔的 UPnP 开发人员工具现已在此处开源:Developer Tools for UPnP。这个工具使得用 10-15 行代码创建一个服务器变得非常简单。英特尔提供了一个 DLL,我可以从 VS Express 调用它,如下所示,效果很好:
device = UPnPDevice.CreateRootDevice();
device.FriendlyName = 'My name';
device.PresentationURL = 'URLToEmbeddedServer";
..
我尝试使用headconv7工具将.h文件Intel的UPNP.DLL转换为pascal文件,并直接从Delphi调用DLL内的外部函数,但是转换的问题太多了。
这太糟糕了,因为英特尔库让创建 UPnP 堆栈变得非常简单,而且这种方法可以很好地应用于组件,但现在使用 .NET 和 VS Express 完成工作更快。
【问题讨论】:
-
您看到了与 UPNP 相关的 this answer,尤其是 François Piette 文章的链接?
-
谢谢;我使用 François Piette 的 UpnPFinderDemo 对 UPNPLib_TLB 进行了试验。列出网络上的现有设备效果很好。它创建了一个不起作用的服务(或者我没有找到如何)
-
看看mikejustin.wordpress.com/2013/07/07/…,基于此,构建发送部分非常简单
-
我还查看了 Whitebear 组件,但它们非常老旧,无法在 XE2-XE5 中使用。我在某处有 D7,将在周末尝试再次安装以进行测试。我也会尝试移植到 XE2,但我认为需要进行很多更改。