Как вызвать сообщения Bonjour / mDNS / ZeroConf с помощью Indy - PullRequest
1 голос
/ 30 марта 2019

Мне нужно обнаружить устройство 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 не инициировало отправку сообщения устройством.

...