Можно ли создать службу zeroconf с помощью Delphi XE5?

Работаете над устройством и хотели бы поддерживать функцию нулевой конфигурации. Таким образом, пользователи могут искать устройство в сети и просто дважды щелкнуть значок, чтобы получить доступ к веб-интерфейсу, без необходимости настраивать его или знать его IP-адрес.

Пытался использовать UPPNPLib_TLB, но кажется, что функции доступны только для чтения; я прав? Я могу создать устройство с помощью CoUPnPDevice.Create, но не могу установить FriendlyName или URL-адрес.

Пытался использовать службу Deltics Bonjour, но при создании произошел сбой (ACCESS_VIOLATION ). В демонстрационном коде используется специальный тестовый блок, что усложняет экспериментирование.

После долгих исследований не похоже, что для этого есть доступный компонент, и был бы признателен за некоторые указатели. Кто-нибудь успешно создал трансляцию zeroconf через UPnP или Bonjour с Delphi XE2/5. Я могу вернуться к Delphi 7, если потребуется. Цель = Windows 7.

ПРИМЕЧАНИЕ. Чтобы было ясно, я могу найти существующие устройства в сети и не хочу перечислять существующие устройства, но я хочу транслировать свою службу, чтобы мой ящик вел себя, например, как сетевой принтер. Единственная служба, которую мне нужно предоставить, — это URL-адрес, чтобы пользователи могли получить доступ к встроенному веб-серверу.

Цените помощь!

РЕДАКТИРОВАНИЕ С помощью предоставленных советов я провел некоторое исследование, и сделать это способом RAD невозможно.

Непосредственное использование MS API отнимает много времени и требует такого уровня понимания C, которого у меня нет. Перенос компонента Delphi 5/Indy 7 на XE2/5 потребует большого объема работы и отладки.

Я обнаружил инструменты разработчика UPnP от Intel, теперь с открытым исходным кодом, здесь: Инструменты разработчика для UPnP. Этот инструмент позволяет очень просто создать сервер в 10-15 строках кода. Intel предоставляет DLL, которую я могу вызвать из VS Express следующим образом, и она отлично работает:

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

..

Я попытался использовать инструмент headconv7, чтобы преобразовать файл .h UPNP.DLL Intel в файл Pascal и вызвать внешние функции в DLL непосредственно из Delphi, но было слишком много проблем с преобразованием.

Это очень плохо, потому что библиотека Intel позволяет очень просто создавать стеки UPnP, и этот подход очень хорошо применим к компоненту, но на данный момент быстрее использовать .NET и VS Express для выполнения работы.


person Alain Thiffault    schedule 18.04.2014    source источник
comment
Вы видели этот ответ, относящийся к UPNP, особенно ссылку на статью Франсуа Пьетта?   -  person Ken White    schedule 18.04.2014
comment
Спасибо; Я экспериментировал с UPNPLib_TLB, используя UpnPFinderDemo Франсуа Пиетта. Список существующих устройств в сети работает хорошо. Это создание службы, которая не работает (или я не нашел, как это сделать)   -  person Alain Thiffault    schedule 19.04.2014
comment
Взгляните на mikejustin.wordpress.com/2013/07/07/ Исходя из этого, очень легко построить отправляющую часть   -  person Sir Rufo    schedule 19.04.2014
comment
Я также посмотрел компоненты Whitebear, но они очень старые и не работают в XE2-XE5. У меня где-то есть D7, и я попытаюсь установить его снова на выходных, чтобы проверить. Я также попытаюсь портировать на XE2, но я думаю, что требуется довольно много изменений.   -  person Alain Thiffault    schedule 19.04.2014


Ответы (1)


При использовании UPNPLib_TLB вы не должны создавать объект UPnPDevice напрямую. UPnpDevice описывает известное устройство в сети, поэтому его свойства доступны только для чтения.

Прочтите документацию:

API контрольной точки

Поиск устройств

Вместо этого вы должны создать экземпляр класса UPnPDeviceFinder. Его методы поиска дадут вам UPnDevice объект для каждого найденного устройства.

person Remy Lebeau    schedule 18.04.2014
comment
Да, есть часть поиска, и она работает, но я ищу обратное; чтобы ответить на UPnPDeviceFinder. Мне нужна какая-то служба, которая отвечает на широковещательные передачи UDP от этого вызова; это лучший способ объяснить, что мне делать? Может быть, я чего-то не понимаю в том, как работает это рукопожатие. - person Alain Thiffault; 19.04.2014
comment
Чтобы создать устройство, которое может найти UPnpDeviceFinder (или любая другая библиотека uPNP), ваше приложение может реализовать Hosted Device и позвольте Windows обрабатывать детали протокола за вас. - person Remy Lebeau; 19.04.2014
comment
В настоящее время изучается использование UPnP Windows API напрямую (что не очень RAD), а также портирование компонента Whitebear Delphi 5. Я опубликую свои выводы в ближайшее время. - person Alain Thiffault; 22.04.2014