如何使用Indy触发Bonjour / mDNS / ZeroConf消息

时间:2019-03-30 12:04:02

标签: delphi indy

我需要使用Indy和Delphi / FreePascal在Windows和macOS上发现一个mDNS设备。参见http://www.multicastdns.org/

如果我使用名为ZeroConfBrowser的外部工具来触发这些消息,那么我已经使用TIdIPMCastClient成功收听了消息。

那么我如何才能自己触发这些消息?最好只过滤“产品” ._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不会触发设备发送消息。

0 个答案:

没有答案