我需要使用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不会不触发设备发送消息。