Я реализовал сетевое обнаружение с помощью МДНС для своего мобильного приложения Flutter, используя пакет multicast_dns.
Идея заключалась в том, что мобильное приложение должно иметь автоматически определять адрес сервера в локальной сети. MDNS кажется более элегантным подходом вместо сканирования портов всей локальной сети.
Код выглядит примерно так:
final MDnsClient client = MDnsClient(rawDatagramSocketFactory: factory);
const String name = '_http._tcp';
await client.start();
// Get the PTR recod for the service.
await for (PtrResourceRecord ptr in client
.lookup<PtrResourceRecord>(ResourceRecordQuery.serverPointer(name))) {
// Use the domainName from the PTR record to get the SRV record,
// which will have the port and local hostname.
// Note that duplicate messages may come through, especially if any
// other mDNS queries are running elsewhere on the machine.
await for (SrvResourceRecord srv in client.lookup<SrvResourceRecord>(
ResourceRecordQuery.service(ptr.domainName))) {
final String bundleId =
ptr.domainName; //.substring(0, ptr.domainName.indexOf('@'));
print('http server instance found at '
'${srv.target}:${srv.port} for "$bundleId".');
}
}
client.stop();
Теперь я ищу способ издеваться над указанной службой с помощью MDNS, потому что сервер еще не готов.
Я нашел что-то подобное для MACOS:
dns-sd -R TestService _http._tcp . 3000
Однако ничего подобного для Окна (или Linux) я не нашел. Как мне рекламировать/макетировать службу http для каждого DNS, чтобы проверить обнаружение моей сети?
В итоге я установил
dns_sd
на Windows. Работал отлично, как описано.