DnsServiceRegister API issue



我正在尝试使用Windows 10+ API DnsServiceRegister注册一个web服务器以被发现。

DNS_SERVICE_REGISTER_REQUEST rd = {};           
DNS_SERVICE_INSTANCE di = {};
rd.pServiceInstance = &di;
rd.unicastEnabled =  0;
di.pszInstanceName = L"Remote Control._http._tcp.local";
di.pszHostName = L"192.168.10.6";
IP4_ADDRESS i4 = {};
InetPton(AF_INET, L"192.168.10.6", (void*)&i4);
di.ip4Address = &i4;
di.wPort = (WORD)12345;
rd.Version = DNS_QUERY_REQUEST_VERSION1;
rd.pRegisterCompletionCallback = [](DWORD Status,
PVOID pQueryContext,
PDNS_SERVICE_INSTANCE pInstance)
{
nop();
};
DnsServiceRegister(&rd, 0);

调用成功(根据文档返回值DNS_REQUEST_PENDING),过了一会儿,我的回调被调用status = 0 (Success?)。但是,没有UPnP工具检测到我的服务。当我将单播设置为1时,状态为9002(错误)。

我在使用这个API时错过了什么?

编辑:当回调函数被调用时,pInstance参数指向一个带有ip4Address和ip6Address空指针的DNS_SERVICE_INSTANCE。为什么?编辑:它可以通过使用DnsServiceBrowse()发现。但是UPnP扫描工具没有发现它。

pszHostName = L"192.168.10.6";

不是有效的主机名。它需要是一个字符串,以。local.

结尾。我有同样的问题,我复制了你的代码片段进行测试。如果主机名是以。local.

结尾的普通名称,则可以工作。

最新更新