1

下面是我连接到 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 打印机吗?

4

1 回答 1

1

我既没有 IPv6 打印机,也没有支持 AirPrint 的设备。

但我有一个建议给你,你如何测试你的代码是否适用于 IPv6 连接:

  • 使用 MacBook 伪造一个环境,使 LAN/WLAN 中的 iOS 设备认为它们“看到”并可以连接到 AirPrint 设备。

以下是详细步骤:

  1. 确保为您的 MacBook 分配了 IPv6 地址。(你如何做到这一点超出了这个答案的范围。)

  2. 确保您的 MacBook 的 CUPS 服务仅允许 IPv6 连接,方法是在以下位置添加一行cupsd.conf

     Listen [xxxx::xxxx:xxxx:xxxx:xxxx]:631
     Listen  /private/var/run/cupsd
     # Port 631
    
  3. 确保你cupsd.conf也有这一行:

     DefaultAuthType None
    

    这确保您无需在 IPv6 和 AirPrint 功能之上调试身份验证授权问题。(一旦您当前的问题得到解决,您可以稍后将其更改回来。)

  4. 在 MacBook 上创建一个共享打印队列并将其命名为abcd. 队列不需要连接到 AirPrint 设备——任何其他打印机都“足够好”。此外,打印机也可以是纯 IPv4、USB 或蓝牙——只要你的 MacBook 可以连接到它。(你如何做到这一点超出了这个答案的范围。)

  5. 测试您的打印机:确保您的 MacBook 打印到它,并确保其他客户端能够打印到共享队列。

  6. 您的 Mac 客户端现在将能够“看到”并使用您的abcd打印队列——但您的 iOS 客户端将不会(还)看到 AirPrint 设备。

  7. 现在使用该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 的主机名
  8. 现在您的 iOS 客户端应该能够看到和使用名为AirPrint-abcd. 服务公告还告诉他们,此 AirPrinter 的连接路径是 MacBook 的 IPv6 地址,使用的端口是 631。


附加说明:

该实用程序的-P参数dns-sd将向您的本地 LAN/WLAN 发出 Bonjour“代理公告”。有关此实用程序的详细信息,请参阅man dns-sd。有关更多背景信息,请参阅dns-sd.org这些其他答案

于 2016-07-03T16:36:47.800 回答