You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Network.framework的NWBrowser时TXT Records为何返回nil?

解决Network.framework中Bonjour服务TXT记录返回nil的问题

问题原因

直接访问result.endpoint.txtRecord无法获取到TXT记录,因为NWEndpoint本身不会自动触发Bonjour服务TXT记录的解析流程。只有通过NWBonjourService对象,才能获取到完整的服务元数据(包括TXT记录)。

解决方法

在浏览结果回调中,将NWEndpoint转换为NWBonjourService类型,再访问其txtRecord属性。如果转换成功,就能拿到对应的TXT记录;如果转换失败,说明该端点不是Bonjour服务类型。

修改后的代码示例

let parameters = NWParameters.tcp
parameters.includePeerToPeer = true
parameters.allowLocalEndpointReuse = true

let browser = NWBrowser(for: .bonjour(type: "_tictactoe._tcp", domain: nil), using: parameters)

browser.browseResultsChangedHandler = { results, changes in
    for result in results {
        // 将端点转换为Bonjour服务对象
        guard let bonjourService = result.endpoint.bonjourService else {
            print("该端点不是Bonjour服务")
            continue
        }
        // 访问TXT记录
        print("Browser result. txtRecords: \(bonjourService.txtRecord)")
        
        // 若需要解析TXT记录的键值对,可使用以下方式
        if let txtData = bonjourService.txtRecord {
            let txtDictionary = NWBonjourService.txtRecord(from: txtData)
            print("解析后的TXT键值对: \(txtDictionary)")
        }
    }
}

// 别忘了启动浏览器
browser.start(queue: DispatchQueue.global())

额外说明

  • 确保Bonjour服务端正确设置并发布了TXT记录,否则即使客户端逻辑正确,也会拿到nil。
  • 如果需要实时监听TXT记录的变化,可以通过重新解析服务来实现。

内容的提问来源于stack exchange,提问作者Charlie Fish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:28:12