Zeroconf: 无法获取 txt 记录
Zeroconf: Unable to get txt records
我一直在尝试在我的 8.1 phone 应用程序中使用 Onovotny's Zeroconf 包。它发现了我正在寻找的服务,但返回了 none 的 TXT 记录。
在 iOS 中,我使用 NSNetServiceBrowser,对于 Android,我使用 JmDNS。两者都给了我我需要的一切,所以我知道这不是服务。
这是我正在使用的代码:
public async Task StartDiscovery()
{
Action<IZeroconfHost> callback = new Action<IZeroconfHost>((IZeroconfHost host) =>
{
Debug.WriteLine(host.Services.Count);
});
IReadOnlyList<IZeroconfHost> results =
await ZeroconfResolver.ResolveAsync(SERVICE_TYPE, new TimeSpan(0, 0, 10), 4, 2000, callback);
Debug.WriteLine(results);
}
当我在回调中设置断点时,这就是我所看到的。
我不确定是我做错了什么,还是图书馆不能处理我的情况。无论哪种方式,我们都将不胜感激。
注意:我几天前在 Zeroconf GitHub 回购上发布了一个问题,但没有收到回复。
我没有使用 NuGet 包,而是将代码拉到我的项目中并设置了几个断点。
在 ZeroconfResolver.cs 中,当我将 Additionals 更改为 Answers 时,我得到了我的服务的 txt 记录。
ZeroconfResolver.cs 第 249 行
// Get the matching service records
var serviceRecords = response.Answers
.Where(r => r.NAME == ptrRec.PTRDNAME)
.Select(r => r.RECORD)
.ToList();
编辑:
合并 Additionals 和 Answers 列表是更好的方法。
List<RR> resourceRecords = new List<RR>().Union(response.Answers).Union(response.Additionals).ToList();
// Get the matching service records
var serviceRecords = resourceRecords
.Where(r => r.NAME == ptrRec.PTRDNAME)
.Select(r => r.RECORD)
.ToList();
我一直在尝试在我的 8.1 phone 应用程序中使用 Onovotny's Zeroconf 包。它发现了我正在寻找的服务,但返回了 none 的 TXT 记录。
在 iOS 中,我使用 NSNetServiceBrowser,对于 Android,我使用 JmDNS。两者都给了我我需要的一切,所以我知道这不是服务。
这是我正在使用的代码:
public async Task StartDiscovery()
{
Action<IZeroconfHost> callback = new Action<IZeroconfHost>((IZeroconfHost host) =>
{
Debug.WriteLine(host.Services.Count);
});
IReadOnlyList<IZeroconfHost> results =
await ZeroconfResolver.ResolveAsync(SERVICE_TYPE, new TimeSpan(0, 0, 10), 4, 2000, callback);
Debug.WriteLine(results);
}
当我在回调中设置断点时,这就是我所看到的。
我不确定是我做错了什么,还是图书馆不能处理我的情况。无论哪种方式,我们都将不胜感激。
注意:我几天前在 Zeroconf GitHub 回购上发布了一个问题,但没有收到回复。
我没有使用 NuGet 包,而是将代码拉到我的项目中并设置了几个断点。
在 ZeroconfResolver.cs 中,当我将 Additionals 更改为 Answers 时,我得到了我的服务的 txt 记录。
ZeroconfResolver.cs 第 249 行
// Get the matching service records
var serviceRecords = response.Answers
.Where(r => r.NAME == ptrRec.PTRDNAME)
.Select(r => r.RECORD)
.ToList();
编辑: 合并 Additionals 和 Answers 列表是更好的方法。
List<RR> resourceRecords = new List<RR>().Union(response.Answers).Union(response.Additionals).ToList();
// Get the matching service records
var serviceRecords = resourceRecords
.Where(r => r.NAME == ptrRec.PTRDNAME)
.Select(r => r.RECORD)
.ToList();