Реклама как сервис печати - mdns - PullRequest
0 голосов
/ 09 июля 2019

Это то, чего я пытаюсь достичь.У меня есть устройство Android со встроенным принтером, к которому я могу получить доступ через последовательный интерфейс.В магазине Play Store есть 2 приложения, которые я хочу использовать и распечатать.Эти приложения позволяют использовать принтеры только через Ethernet.

Я написал приложение для Android, которое прослушивает соединения через порт 9100, при любом входящем входе он просто передает необработанные данные на принтер.Это работает, как и ожидалось, с одним из приложений.С работающим приложением у меня были возможности указать IP-адрес принтера.

Другое приложение не позволяет мне указать IP-адрес, оно пытается автоматически найти принтер для меня и завершается неудачей.

I 'Мы пытались рекламировать услугу в сети, используя следующее.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);
    }

Если я загружаю приложение на устройство, которое перечисляет дополнительные услуги, оно показывает

_printer._tcp.local printproxy 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

любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 10 июля 2019

Оказывается, мне просто нужно было изменить службу на _ipp, чтобы она автоматически определялась в сети.

Хотя на самом деле оказывается, что приложение для Android выполняет обнаружение принтера с помощью UDP Broadcast и просто ожидает возврата строки с устройства. Это другой вопрос, хотя ...

...