作为印刷服务做广告 - mdns
Advertise as print service - mdns
这就是我想要实现的目标。我有一个带有内置打印机的 android 设备,我可以通过串行接口访问它。我希望使用和打印 Play 商店中的 2 个应用程序。这些应用程序仅允许通过以太网使用打印机。
我写了一个 android 应用程序来侦听端口 9100 上的连接,任何传入它都会将原始数据传递给打印机。这与其中一个应用程序的预期一样有效。使用工作应用程序,我可以选择指定打印机 IP。
其他应用程序不允许我指定 IP 地址,它试图自动为我找到打印机但失败了。
我尝试使用以下方法在网络上宣传该服务。 https://github.com/andriydruk/RxDNSSD
try {
dnssd.register("printproxy", "_printer._tcp", 9100,
new RegisterListener() {
@Override
public void serviceRegistered(DNSSDRegistration registration, int flags,
String serviceName, String regType, String domain) {
Log.i("TAG", "Register successfully ");
}
@Override
public void operationFailed(DNSSDService service, int errorCode) {
Log.e("TAG", "error " + errorCode);
}
});
} catch (DNSSDException e) {
Log.e("TAG", "error", e);
}
如果我在列出 bonjour 服务的设备上加载应用程序,它会显示
_printer._tcp.local
打印代理
192.168.2.28:9100
所以它看起来可能按预期工作。虽然需要打印机的 android 应用程序仍然找不到它。
我运行 wireshark,虽然没有弄清楚这一点。
在扫描过程中,我可以看到应用正在探测网络。我得到以下信息。
7274 31.804692 192.168.1.28 224.0.0.251 MDNS 176 Standard query 0x0000 ANY printproxy._printer._tcp.local, "QM" question ANY Android-3.local, "QM" question ANY Android-3.local, "QM" question SRV 0 0 9100 Android-3.local A 192.168.1.28 AAAA fe80::2e0:4cff:fea8:4db9
7290 32.055612 192.168.1.28 224.0.0.251 MDNS 420 Standard query response 0x0000 TXT, cache flush PTR _printer._tcp.local PTR printproxy._printer._tcp.local SRV, cache flush 0 0 9100 Android-3.local PTR, cache flush Android-3.local PTR, cache flush Android-3.local A, cache flush 192.168.1.28 AAAA, cache flush fe80::2e0:4cff:fea8:4db9 NSEC, cache flush printproxy._printer._tcp.local NSEC, cache flush 28.1.168.192.in-addr.arpa NSEC, cache flush 9.B.D.4.8.A.E.F.F.F.C.4.0.E.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.E.F.ip6.arpa NSEC, cache flush Android-3.local
如有任何帮助,我们将不胜感激。
原来我只需要将服务更改为 _ipp 就可以在网络上自动检测到它。
尽管实际上 android 应用程序正在使用 UDP 广播进行打印机发现,只是在等待从设备到 return 的字符串。不过那是另一个问题...
这就是我想要实现的目标。我有一个带有内置打印机的 android 设备,我可以通过串行接口访问它。我希望使用和打印 Play 商店中的 2 个应用程序。这些应用程序仅允许通过以太网使用打印机。
我写了一个 android 应用程序来侦听端口 9100 上的连接,任何传入它都会将原始数据传递给打印机。这与其中一个应用程序的预期一样有效。使用工作应用程序,我可以选择指定打印机 IP。
其他应用程序不允许我指定 IP 地址,它试图自动为我找到打印机但失败了。
我尝试使用以下方法在网络上宣传该服务。 https://github.com/andriydruk/RxDNSSD
try {
dnssd.register("printproxy", "_printer._tcp", 9100,
new RegisterListener() {
@Override
public void serviceRegistered(DNSSDRegistration registration, int flags,
String serviceName, String regType, String domain) {
Log.i("TAG", "Register successfully ");
}
@Override
public void operationFailed(DNSSDService service, int errorCode) {
Log.e("TAG", "error " + errorCode);
}
});
} catch (DNSSDException e) {
Log.e("TAG", "error", e);
}
如果我在列出 bonjour 服务的设备上加载应用程序,它会显示
_printer._tcp.local 打印代理 192.168.2.28:9100
所以它看起来可能按预期工作。虽然需要打印机的 android 应用程序仍然找不到它。
我运行 wireshark,虽然没有弄清楚这一点。
在扫描过程中,我可以看到应用正在探测网络。我得到以下信息。
7274 31.804692 192.168.1.28 224.0.0.251 MDNS 176 Standard query 0x0000 ANY printproxy._printer._tcp.local, "QM" question ANY Android-3.local, "QM" question ANY Android-3.local, "QM" question SRV 0 0 9100 Android-3.local A 192.168.1.28 AAAA fe80::2e0:4cff:fea8:4db9
7290 32.055612 192.168.1.28 224.0.0.251 MDNS 420 Standard query response 0x0000 TXT, cache flush PTR _printer._tcp.local PTR printproxy._printer._tcp.local SRV, cache flush 0 0 9100 Android-3.local PTR, cache flush Android-3.local PTR, cache flush Android-3.local A, cache flush 192.168.1.28 AAAA, cache flush fe80::2e0:4cff:fea8:4db9 NSEC, cache flush printproxy._printer._tcp.local NSEC, cache flush 28.1.168.192.in-addr.arpa NSEC, cache flush 9.B.D.4.8.A.E.F.F.F.C.4.0.E.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.E.F.ip6.arpa NSEC, cache flush Android-3.local
如有任何帮助,我们将不胜感激。
原来我只需要将服务更改为 _ipp 就可以在网络上自动检测到它。
尽管实际上 android 应用程序正在使用 UDP 广播进行打印机发现,只是在等待从设备到 return 的字符串。不过那是另一个问题...