【问题标题】:Possible to create a zeroconf service with Delphi XE5?可以用 Delphi XE5 创建 zeroconf 服务吗?
【发布时间】: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,但我认为需要进行很多更改。

标签: delphi bonjour upnp


【解决方案1】:

使用 UPNPLib_TLB 时,不应直接创建 UPnPDevice 对象。 UPnpDevice 描述了网络上的一个已知设备,这就是为什么它的属性是只读的。

阅读文档:

Control Point API

Finding Devices

您应该改为创建UPnPDeviceFinder 类的实例。它的搜索方法会为您找到的每个设备提供一个UPnDevice 对象。

【讨论】:

  • 是的,得到了​​发现部分,它可以工作,但我正在寻找相反的部分;响应 UPnPDeviceFinder。我需要某种服务来响应来自此调用的 UDP 广播;这是解释我该怎么做的更好方法吗?也许我不明白这种“握手”是如何工作的。
  • 要创建UPnpDeviceFinder(或任何其他uPNP库)可以找到的设备,您的应用可以实现Hosted Device并让Windows为您处理协议细节。
  • 目前正在研究直接使用 UPnP Windows API(这不是很 RAD)以及移植 Whitebear Delphi 5 组件。我会尽快回复我的发现。
猜你喜欢
  • 1970-01-01
  • 2013-11-22
  • 2023-03-16
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多