Мне нужно обнаружить устройство mDNS в Windows и macOS, используя Indy и Delphi / FreePascal. Смотри http://www.multicastdns.org/.
Я успешно прослушал сообщения, используя TIdIPMCastClient, если я использую внешний инструмент ZeroConfBrowser, чтобы вызвать их.
Так как я могу вызвать эти сообщения самостоятельно? Желательно с фильтрацией только «product» ._ tcp.local устройств, которые меня интересуют.
Обратите внимание, что использование внешнего кода, такого как Apples Bonjour DLL, не является вариантом по причинам развертывания.
FWIW само устройство использует инфраструктуру lwIP для поддержки mDNS.
Вот фрагменты, которые я использовал до сих пор:
object IdIPMCastClient1: TIdIPMCastClient
Bindings = <
item
IP = '0.0.0.0'
Port = 5353
end>
DefaultPort = 5353
MulticastGroup = '224.0.0.251'
ReuseSocket = rsTrue
ThreadedEvent = True
OnIPMCastRead = IdIPMCastClient1IPMCastRead
Left = 484
Top = 48
end
object IdDNSResolver1: TIdDNSResolver
QueryType = [qtPTR]
WaitingTime = 5000
AllowRecursiveQueries = True
Host = '224.0.0.251'
Port = 5353
IPVersion = Id_IPv4
Left = 456
Top = 136
end
procedure TfrmETMain.btnmDNSSearchClick(Sender: TObject);
begin
IdIPMCastClient1.Active:= not IdIPMCastClient1.Active;
end;
procedure TfrmETMain.btnResolveHostClick(Sender: TObject);
begin
IdDNSResolver1.QueryType:= [qtPTR];
IdDNSResolver1.WaitingTime:= 500;
IdDNSResolver1.Resolve(cbResolveHost.Text);
end;
Как упоминалось в комментариях, использование TIdDNSResolver не инициировало отправку сообщения устройством.