gpt4 book ai didi

ios - 如何从 NetService 获取打印机 URL

转载 作者:可可西里 更新时间:2023-11-01 01:57:36 24 4
gpt4 key购买 nike

我正在尝试使用这种方式获取所有本地打印机;

let serviceBrowser = NetServiceBrowser()
serviceBrowser.delegate = self
serviceBrowser.schedule(in: .current, forMode: .defaultRunLoopMode)
serviceBrowser.searchForServices(ofType: "_ipp._tcp.", inDomain:"local.")

它找到了所有已连接的打印机,但我想知道它们的 url 以创建 UIPrinter ,其 URL 类似于 UIPrinter(url: URL("urlstring"))

func netServiceBrowser(_ browser: NetServiceBrowser, didFind service: NetService, moreComing: Bool) {
print(service)
// output: <NSNetService 0x1c0228960> local. _ipp._tcp. RICOH imagio MP C3302 [002673499B5F] -1
}

我不知道使用这种方式是否是查找本地/空中打印机的解决方案。

注意:UIPrinterPickerController 不是解析的选项。

最佳答案

您需要 resolve找到它们后的网络服务。然后你可以做这样的事情来构建一个 UIPrinter 来发送到 AirPrint。

let printerPath = "\(uri)://\(host):\(port)/" + (service.textRecordField(field: "rp") ?? "")
guard let printerUrl = URL(string: printerPath)
else { return nil }
let printer = UIPrinter(url: printerUrl)
  • uri:“ipp”、“ipps”、“lpd”、“套接字”。您可以通过检查 NetService 对象的类型字段来确定使用哪个。
  • host:来自 NetService 对象的主机名字段
  • port:来自 NetService 对象的端口名称字段
  • rp:打印机的队列名称(路径)。您可以通过解码 NetService 对象的文本记录字典中的“rp”字段来获得它。

这是我从 NetService 对象获取 txtRecord 数据的扩展:

 extension NetService {
func textRecordField(field: String) -> String?
{
guard
let data = self.txtRecordData(),
let field = NetService.dictionary(fromTXTRecord: data)[field]
else { return nil }

return String(data: field, encoding: String.Encoding.utf8)
}
}

关于ios - 如何从 NetService 获取打印机 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50464724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com