我在Windows.Devices.Enumeration及其带有DN-SD和C ++ / WinRT的DeviceWatcher时遇到问题。 我的机器中有2个网卡,仅找到通过第一个网卡连接的机器上的那些服务。
这既在我自己的测试程序中发生,又在我扩展Microsoft“ Windows Universal Samples”中的DeviceEnumeration示例程序以包括DNS-SD时发生。在Samples / DeviceEnumerationAndPairing / cpp / DisplayHelpers.h中添加到DeviceSelectorChoices。
static property DeviceSelectorInfo^ Dnssd
{
DeviceSelectorInfo^ get();
}
并插入Samples / DeviceEnumerationAndPairing / cpp / DisplayHelpers.cpp插入
DeviceSelectorInfo^ DeviceSelectorChoices::Dnssd::get()
{
return ref new DeviceSelectorInfo("DNS-SD",
DeviceClass::All,
"System.Devices.AepService.ProtocolId:=\"{4526e8c1-8aac-4153-9b16-55e86ada0e54}\" "
"AND System.Devices.Dnssd.ServiceName:=\"_myservice._tcp\"",
DeviceInformationKind::AssociationEndpointService);
}
到Samples / DeviceEnumerationAndPairing / cpp / DisplayHelpers.cpp并更新方法:
IVectorView<DeviceSelectorInfo^>^ DeviceSelectorChoices::DeviceWatcherSelectors::get()
{
Vector<DeviceSelectorInfo^>^ selectors = ref new Vector<DeviceSelectorInfo^>(begin(CommonDeviceSelectors), end(CommonDeviceSelectors));
selectors->Append(Dnssd);
...
然后编译并运行并从设备监视程序中选择DNS-SD-它仅在第一个网络接口的子网上有连接的机器上查找服务,即使它在第二个网络的子网上有连接也是如此。但是它没有列出仅在第二个网络上的机器上运行的任何服务。
使用dns-sd命令行工具可以找到两个网络上所有已发布的服务:
dns-sd -B _myservice._tcp
我已经尝试过AQSFilter的许多变体,认为它可能不是默认使用两个网络接口-例如使用System.Devices.Dnssd.NetworkAdapterId-却不高兴。
我猜想它在Windows中比设备枚举API还要低的可能性。?