C# 用“ServiceDiscovery.Dnssd”做广告,用“你好”做发现?
谷歌是否允许通过苹果公司的“你好”来发现一项服务 微软的文档提到了所有正确的DNS-SD RFC,但我无法发现我的程序使用这个。我知道Bonjour Browser程序正在工作,因为它可以发现我网络上的其他设备以及通过mDNSResponder发布的本地服务。微软关于这个名称空间的文档非常模糊,让我感到疑惑 在这段代码中是否有明显的错误C# 用“ServiceDiscovery.Dnssd”做广告,用“你好”做发现?,c#,uwp,windows-10,bonjour,dns-sd,C#,Uwp,Windows 10,Bonjour,Dns Sd,谷歌是否允许通过苹果公司的“你好”来发现一项服务 微软的文档提到了所有正确的DNS-SD RFC,但我无法发现我的程序使用这个。我知道Bonjour Browser程序正在工作,因为它可以发现我网络上的其他设备以及通过mDNSResponder发布的本地服务。微软关于这个名称空间的文档非常模糊,让我感到疑惑 在这段代码中是否有明显的错误 async Task RegisterServiceAsync() { var hostNames = NetworkInformation
async Task RegisterServiceAsync()
{
var hostNames = NetworkInformation
.GetHostNames()
.Where(x => x.Type == HostNameType.DomainName)
.Select(x => new KeyValuePair<string, HostName>(x.ToString(), x))
.ToList();
var hostName = Pick("Pick a host name:", hostNames);
Console.WriteLine($"Host name is \"{hostName}\"");
var service = new DnssdServiceInstance(
dnssdServiceInstanceName: "abc._tcp.local.",
hostName: hostName,
port: 13337
);
using (var socket = new StreamSocketListener())
{
var registration = await service.RegisterStreamSocketListenerAsync(socket);
Console.WriteLine(registration.Status);
Console.WriteLine($"Renamed: {registration.HasInstanceNameChanged}");
Console.WriteLine($"Service instance name: {service.DnssdServiceInstanceName}");
Console.ReadKey(true);
}
}
示例输出:
1) hostname.domain.local
2) hostname.local
Pick a host name: (1-2) 2
Host name is "hostname.local"
Success
Renamed: False
Service instance name: abc._tcp.local.
dnssdServiceInstanceName的格式错误。这是必须的。。。例如,此代码可以工作:
async Task RegisterServiceAsync()
{
var hostNames = NetworkInformation
.GetHostNames()
.Where(x => x.Type == HostNameType.DomainName)
.Select(x => new KeyValuePair<string, HostName>(x.ToString(), x))
.ToList();
var hostName = Pick("Pick a host name:", hostNames);
Console.WriteLine($"Host name is \"{hostName}\"");
var service = new DnssdServiceInstance(
dnssdServiceInstanceName: "instanceName._abcservice._tcp.local.",
hostName: hostName,
port: 13337
);
using (var socket = new StreamSocketListener())
{
var registration = await service.RegisterStreamSocketListenerAsync(socket);
Console.WriteLine(registration.Status);
Console.WriteLine($"Renamed: {registration.HasInstanceNameChanged}");
Console.WriteLine($"Service instance name: {service.DnssdServiceInstanceName}");
Console.ReadKey(true);
}
}
我用微软的一个示例程序解决了这个问题