当前位置 : 主页 > 编程语言 > delphi >

可以用Delphi XE5创建一个zeroconf服务吗?

来源:互联网 收集:自由互联 发布时间:2021-06-23
在设备上工作并希望支持零配置功能.这样,用户可以在网络上查找设备,只需双击图标即可访问Web界面,而无需配置或知道其IP地址. 试图使用UPNPLib_TLB,但函数似乎是只读的;我对吗?我可以
在设备上工作并希望支持零配置功能.这样,用户可以在网络上查找设备,只需双击图标即可访问Web界面,而无需配置或知道其IP地址.

试图使用UPNPLib_TLB,但函数似乎是只读的;我对吗?我可以使用CoUPnPDevice.Create创建设备,但不能设置FriendlyName或URL.

试图使用Deltics Bonjour service但它在创建时崩溃(ACCESS_VIOLATION).演示代码使用自定义测试单元,这使实验变得复杂.

经过大量研究后,看起来并没有可用的组件,并且会欣赏一些指示.有没有人通过UPnP或Bonjour用Delphi XE2 / 5成功创建了zeroconf广播.如果需要,我可以回到Delphi 7.目标= Windows 7.

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

感谢帮助!

编辑
通过提供的提示,我做了一些研究,并且通过RAD方式完成这项工作是不可能的.

直接使用MS API非常耗时,并且需要对C语言有一定程度的理解.将Delphi 5 / Indy 7组件移植到XE2 / 5将需要大量的工作和调试.

我发现英特尔的UPnP开发人员工具现在在这里开源:Developer Tools for UPnP.这个工具非常简单地用10-15行代码创建一个服务器.英特尔提供了一个我可以从VS Express调用的DLL,如下所示,它运行良好:

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

..

我尝试使用headconv7工具将.h文件Intel的UPNP.DLL转换为pascal文件,并直接从Delphi调用DLL中的外部函数,但转换有太多问题.

这太糟糕了,因为英特尔库使创建UPnP堆栈变得非常简单,并且该方法非常适用于组件,但现在它更快地使用.NET和VS Express来完成工作.

使用UPNPLib_TLB时,不应该直接创建UPnPDevice对象. UPnpDevice描述了网络上的已知设备,这就是它的属性是只读的原因.

阅读文档:

Control Point API

Finding Devices

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

网友评论