因此,为了将(宣布服务)发布到iOS设备上作为打印机,我使用NSNetService并将类型设置为_ipp._tcp。
但是,为了被承认为AirPrint打印机,要求包括:
_ipp公告中显示一个_universal子类型。来源
因此,我试图找出如何在NSNetService下发布子类型和TXT记录,这是我无法做到的。有人有什么想法吗?
发布于 2016-07-04 23:04:03
由于到目前为止还没有显示代码的起点或存根,这里有一个不同的提示:您可以在本地LAN/WLAN中模拟有效的、工作的AirPrint服务公告,这将允许您的iOS客户端成功地打印到现有打印机(AirPrint与否)。
要求:带有OS的Mac。
一旦你做到了这一点,你现在可以使用类似Wireshark或tcpdump之类的东西来捕捉电线上或空中的包,并保存和分析它们。
然后开始编写您自己的应用程序,并使它发出与模拟程序相同的包。
下面是已知的工作在OS约塞米蒂(10.10.x)。
假设..。
mymac,192.168.111.111,abcd的共享打印机(不需要支持AirPrint!)DefaultAuthType none放入/etc/cups/cupsd.conf),...then,您可以使abcd队列对iOS客户端可用。
要测试这一点,只需在Terminal.app窗口中执行以下命令(注意,该命令不会返回--如果关闭Terminal.app窗口,则该命令的效果将消失!):
dns-sd \
-P AirPrint-abcd \
_ipp._tcp,_universal \
local. \
631 \
mymac.local. \
192.168.111.111 \
pdl="application/pdf,image/urf" \
kind="document" \
priority="1" \
product="Model Name of my Printer" \
rp="printers/abcd" \
URF="DM3" \
Duplex="T" \
Color="T" \
note="Testing AirPrint via MacBook"\
txtvers="1" \
qtotal="1" \
printer-type="0x0480FFFC" \
printer-state="3" \
air="none" \
UUID="54321abc-1234-1234-abcd-1238e4babcd8"如果这样做有效(正如它应该的那样),您可以很容易地找到一个脚本或cron作业来执行这个命令(并让它在后台运行)。这是留给读者的练习。
(如果第一个Mac提供共享的打印队列,上面的所有细节都与第一个Mac的设置相匹配,那么即使在第二个完全不同的Mac中运行这个命令也可以保持不变。)
背景信息:
dns-sd命令行实用程序是一个测试和开发工具,每个人都可以访问Bonjour、mDNS (多播DNS)和DNS-SD (基于DNS的服务发现)。自从Bonjour出现以来,它是每一个OS系统的一部分。
-P参数dns-sd将向您的本地LAN/WLAN发出一个Bonjour“代理公告”。该公告将告诉潜在的AirPrint客户端以下信息:
.local.设备可用。Airprint-abcd。192.168.111.111和端口631来实现。printers/abcd的打印队列名对其进行打印。有关此实用程序的详细信息,请参阅man dns-sd。有关更多背景信息,请参见dns-sd.org和这些其他答案。
https://stackoverflow.com/questions/7310506
复制相似问题