我的 AirPrint 代码会连接到仅支持 IPv6 的打印机吗?
Will my AirPrint Code connect to an IPv6-only Printer?
下面是我连接到 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 打印机吗?
我既没有 IPv6 打印机,也没有支持 AirPrint 的设备。
但我有一个建议给你,你如何测试你的代码是否适用于 IPv6 连接:
- 使用 Mac书籍伪造一个环境,使您 LAN/WLAN 中的 iOS 设备认为它们 "see" 并且可以连接到 AirPrint 设备。
详细步骤如下:
确保为您的Mac图书分配了 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 功能之上调试 Authentication 或 Authorization 问题。 (一旦您当前的问题得到解决,您可以稍后将其改回。)
在您的Mac图书上创建一个共享打印队列,并命名为abcd
。队列不需要连接到 AirPrint 设备——任何其他打印机都将是 "good enough"。此外,打印机也可以是纯 IPv4、USB 或蓝牙——只要您的 MacBook 可以连接到它。 (你如何做到这一点超出了这个答案的范围。)
测试您的打印机:确保您的 Mac图书可以打印到它,并确保其他客户端能够打印到共享队列。
您的 Mac 客户现在可以 "see" 并使用您的 abcd
打印队列 -- 但您的 iOS 客户不能( yet) 查看 AirPrint 设备。
现在使用 dns-sd
实用程序向您的本地网络宣布一个虚假的 AirPrint 设备,指向名为 abcd
的真实打印队列。该命令的一般语法是这样的:
dns-sd -P <Name> <Type> <Domain> <Port> <Hostname> <IP> [<TXT>...]
现在 运行 真正的命令,打开 Terminal.app window 并输入:
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
是您的 Mac图书 的主机名
现在您的 iOS 客户端应该能够看到并使用名为 AirPrint-abcd
的 AirPrint 设备。服务公告还告诉他们,此 AirPrinter 的连接路径是您 MacBook 的 IPv6 地址,要使用的端口是 631。
补充说明:
-P
dns-sd
实用程序的参数将向您的本地 LAN/WLAN 发送 Bonjour "proxy announcement"。有关此实用程序的详细信息,请参阅 man dns-sd
。有关更多背景信息,请参阅 dns-sd.org and these other answers。
下面是我连接到 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 打印机吗?
我既没有 IPv6 打印机,也没有支持 AirPrint 的设备。
但我有一个建议给你,你如何测试你的代码是否适用于 IPv6 连接:
- 使用 Mac书籍伪造一个环境,使您 LAN/WLAN 中的 iOS 设备认为它们 "see" 并且可以连接到 AirPrint 设备。
详细步骤如下:
确保为您的Mac图书分配了 IPv6 地址。 (你如何做到这一点超出了这个答案的范围。)
通过在
中添加一行,确保您的 MacBook 的 CUPS 服务仅允许 IPv6 连接cupsd.conf
:Listen [xxxx::xxxx:xxxx:xxxx:xxxx]:631 Listen /private/var/run/cupsd # Port 631
确保您的
cupsd.conf
也有此行:DefaultAuthType None
这确保您无需在 IPv6 和 AirPrint 功能之上调试 Authentication 或 Authorization 问题。 (一旦您当前的问题得到解决,您可以稍后将其改回。)
在您的Mac图书上创建一个共享打印队列,并命名为
abcd
。队列不需要连接到 AirPrint 设备——任何其他打印机都将是 "good enough"。此外,打印机也可以是纯 IPv4、USB 或蓝牙——只要您的 MacBook 可以连接到它。 (你如何做到这一点超出了这个答案的范围。)测试您的打印机:确保您的 Mac图书可以打印到它,并确保其他客户端能够打印到共享队列。
您的 Mac 客户现在可以 "see" 并使用您的
abcd
打印队列 -- 但您的 iOS 客户不能( yet) 查看 AirPrint 设备。现在使用
dns-sd
实用程序向您的本地网络宣布一个虚假的 AirPrint 设备,指向名为abcd
的真实打印队列。该命令的一般语法是这样的:dns-sd -P <Name> <Type> <Domain> <Port> <Hostname> <IP> [<TXT>...]
现在 运行 真正的命令,打开 Terminal.app window 并输入:
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
是您的 Mac图书 的主机名
现在您的 iOS 客户端应该能够看到并使用名为
AirPrint-abcd
的 AirPrint 设备。服务公告还告诉他们,此 AirPrinter 的连接路径是您 MacBook 的 IPv6 地址,要使用的端口是 631。
补充说明:
-P
dns-sd
实用程序的参数将向您的本地 LAN/WLAN 发送 Bonjour "proxy announcement"。有关此实用程序的详细信息,请参阅 man dns-sd
。有关更多背景信息,请参阅 dns-sd.org and these other answers。