以下是我连接到IPv4打印机的代码。一切都很好。
NSString *printerURL = @"ipp://192.168.1.3:631/ipp/print" //IPv4 : OK
UIPrinter *myPrint = [UIPrinter printerWithURL:[NSURL URLWithString:printerURL]];
[myPrint contactPrinter:^(BOOL available) {
if(!available){
// Show error
}
[printInteraction printToPrinter:myPrint completionHandler:^(UIPrintInteractionController * _Nonnull printInteractionController, BOOL completed, NSError * _Nullable error) {
// Print
}];
}];
因为我没有IpV6打印机,所以我不知道下面的代码会发生什么:
NSString *printerURL = @"ipp://FE80::FE3F:DBFF:FE51:6BA:631/ipp/print" //IPv6 : ????
它会连接到IPv6打印机吗?
答案 0 :(得分:1)
我既没有IPv6打印机,也没有支持AirPrint的设备。
但我向您提出建议,如何测试您的代码是否适用于IPv6连接:
以下是详细步骤:
确保为MacBook分配了IPv6地址。 (你如何做到这一点超出了这个答案的范围。)
通过向cupsd.conf
添加一行,确保MacBook的CUPS服务仅允许IPv6连接:
Listen [xxxx::xxxx:xxxx:xxxx:xxxx]:631
Listen /private/var/run/cupsd
# Port 631
确保您的cupsd.conf
也有此行:
DefaultAuthType None
这可确保您无需在IPv6和AirPrint功能之上调试身份验证或授权问题。 (一旦您当前的问题得到解决,您可以稍后再更改。)
在MacBook上创建共享打印队列,并将其命名为abcd
。队列不需要连接到AirPrint设备 - 任何其他打印机都“足够好”。此外,只要您的MacBook可以连接打印机,打印机也可以是仅限IPv4,USB或蓝牙。 (你如何做到这一点超出了这个答案的范围。)
测试您的打印机:确保您的MacBook打印到它,并确保其他客户端能够打印到共享队列。
您的Mac客户端现在可以“查看”并使用您的abcd
打印队列 - 但您的iOS客户端(尚未)会看到AirPrint设备。
现在使用dns-sd
实用程序向本地网络宣布一个虚假的AirPrint设备,指向名为abcd
的真实打印队列。该命令的一般语法是:
dns-sd -P <Name> <Type> <Domain> <Port> <Hostname> <IP> [<TXT>...]
现在运行实际命令,打开一个Terminal.app窗口并输入:
dns-sd \
-P AirPrint-abcd \
_ipp._tcp,_universal \
local. \
631 \
mymacbook.local. \
xxxx::xxxx:xxxx:xxxx:xxxx \
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 on MacBook" \
txtvers="1" \
qtotal="1" \
printer-type="0x0480FFFC" \
printer-state="3" \
air="none" \
UUID="54321abc-1234-1234-abcd-ffa8e4bdcbf8"
在这里,
xxxx::xxxx:xxxx:xxxx:xxxx
是MacBook的IPv6地址mymacbook
是MacBook的主机名现在,您的iOS客户端应该能够查看和使用名为AirPrint-abcd
的AirPrint设备。服务公告还告诉他们,这个AirPrinter的连接路径是MacBook的IPv6地址,使用的端口是631。
附加说明:
-P
实用程序的 dns-sd
参数将向您的本地LAN / WLAN发出Bonjour“代理公告”。有关此实用程序的详细信息,请参阅 man dns-sd
。有关更多背景信息,请参阅dns-sd.org和these other answers。