做为印刷服务刊登广告-Mdns

时间:2019-07-09 19:29:47

标签: java android 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应用仍然找不到。

我跑了电线,但并没有对此一清二楚。

在扫描过程中,我可以看到该应用正在探测网络。我得到以下信息。

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

结果是,我只需要将服务更改为_ipp即可在网络上对其进行自动检测。

尽管事实证明,Android应用程序正在使用UDP广播进行打印机发现,并且只是在等待设备返回的字符串。但这是另一个问题...