Delphi XE5是否可以创建零配置(zeroconf)服务?

4

正在设计一款电器,并希望支持零配置功能。这样,用户可以在网络上查找设备,只需双击图标即可访问Web界面,而无需进行配置或知道其IP地址。

尝试使用UPNPLib_TLB,但函数似乎是只读的,我是对的吗?我可以使用CoUPnPDevice.Create创建设备,但无法设置FriendlyName或URL。

尝试使用Deltics Bonjour服务,但它会在创建时崩溃(ACCESS_VIOLATION)。演示代码使用自定义测试单元,使实验复杂化。

经过大量研究,似乎没有可用于此的组件,我需要一些指针。有人是否成功地使用Delphi XE2/5通过UPnP或Bonjour创建了零配置广播?如果需要,我可以回到Delphi 7。目标=Windows 7。

注意:明确一点,我可以在网络上找到现有的设备,不想枚举现有的设备,但我想要的是广播我的服务,以使我的盒子就像网络打印机那样运行。唯一需要公开的服务是URL,以便用户可以访问嵌入式Web服务器。

感谢帮助!

编辑 根据提供的提示,我进行了一些研究,但用RAD方式完成这项工作是不可能的。

直接使用MS API很耗时,并且需要我不具备的C语言理解水平。将Delphi 5/Indy 7组件移植到XE2/5将需要大量的工作和调试。

我发现Intel现在开源了UPnP开发人员工具: Developer Tools for UPnP。这个工具可以用10-15行代码创建一个服务器。 Intel提供了一个DLL,我可以从VS Express中调用它,如下所示,效果很好:

device = UPnPDevice.CreateRootDevice();
device.FriendlyName = 'My name';
device.PresentationURL = 'URLToEmbeddedServer";

我尝试使用headconv7工具将Intel的UPNP.DLL文件转换为Pascal文件,从而直接从Delphi调用DLL中的外部函数,但是转换过程中出现了太多问题。

这很遗憾,因为Intel库使创建UPnP堆栈变得非常简单,这个方法非常适合作为组件实现,但目前使用.NET和VS Express更快地完成这项工作。


你看到了与UPNP相关的这个答案,特别是弗朗索瓦·皮耶特(François Piette)的文章链接吗? - Ken White
谢谢;我使用François Piette的UpnPFinderDemo尝试了UPNPLib_TLB。列出网络上现有设备的功能很好用。但是创建服务的功能无法正常工作(或者我没有找到如何操作)。 - Alain Thiffault
请查看http://mikejustin.wordpress.com/2013/07/07/discover-activemq-brokers-with-delphi-xe4-and-indy-10-6/,基于此非常容易构建发送部分。 - Sir Rufo
我也看了Whitebear组件,但它们已经很老了,在XE2-XE5中无法使用。我有一个D7版本,并将在周末尝试重新安装它以进行测试。我还将尝试移植到XE2,但我认为需要进行相当多的更改。 - Alain Thiffault
1个回答

1
使用UPNPLib_TLB时,您不应直接创建UPnPDevice对象。 UPnpDevice描述网络上已知的设备,因此其属性为只读。
请阅读文档: 控制点API 查找设备 您应该创建UPnPDeviceFinder类的实例。其搜索方法将为每个找到的设备提供一个UPnDevice对象。

是的,我已经找到了相关部分并且它也能正常工作,但我现在需要反过来;响应UPnPDeviceFinder。我需要一种服务来响应这个调用发送的UDP广播;这样解释是否更好一些?也许我对这个“握手”如何工作还有一些不理解的地方。 - Alain Thiffault
1
要创建一个UPnpDeviceFinder(或任何其他uPNP库)可以找到的设备,您的应用程序可以实现Hosted Device,并让Windows为您处理协议细节。 - Remy Lebeau
目前正在考虑直接使用UPnP Windows API(这并不是非常RAD)以及移植Whitebear Delphi 5组件。我很快会发布我的研究结果。 - Alain Thiffault

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接