Я пытаюсь использовать свой телефон для Android в качестве принтера. Я использую ServerSocket для получения документа для печати. Если я добавлю свой телефон в качестве IP-принтера, указав IP-адрес и порт и выбрав «Общий почтовый принтер», я могу правильно получить файл в формате ps. Я не хочу добавлять свой телефон в качестве принтера в качестве IP-принтера. Итак, теперь я использую NsdManager для регистрации своего устройства в качестве принтера. Он автоматически распознается как принтер Bonjour, и я могу успешно добавить его в качестве принтера. Но теперь каждый раз, когда я печатаю документ с компьютера, я получаю эти данные во входном потоке сокета.Bonjour (IPP) vs Jetdirect-Socket Printer
POST/HTTP/1.1 Content-Length: 673 Content-Type: application/ipp Host:
Android-2.local:9200 User-Agent: CUPS/2.1.0 (Darwin 15.2.0; x86_64)
IPP/2.0 Expect: 100-continue Gattributes-charsetutf-8Hattributes-
natural-languageen-usEprinter-uriipp://Android-
2.local.:9200/Drequested-attributescompression-supportedDcopies-
supportedDcups-versionDdocument-format-supportedD marker-colorsDmarker-
high-levelsD marker-levelsDmarker-low-levelsDmarker-messageDmarker-
namesDmarker-typesDmedia-col-supportedD$multiple-document-handling-
supportedDoperations-supportedDprint-color-mode-supportedD printer-
alertDprinter-alert-descriptionDprinter-is-accepting-jobsD printer-
mandatory-job-attributesD printer-stateDprinter-state-messageDprinter-
state-reasons
Я прочитал документацию IPP и я посылаю 100 Продолжить в ответ и весь необходимый PARAMS как этот
clientSocket.setTcpNoDelay(true);
BufferedOutputStream out = new BufferedOutputStream(clientSocket.getOutputStream());
out.write("HTTP/1.1 100\r\n".getBytes("UTF-8"));
out.write("\r\n".getBytes("UTF-8"));
out.write("compression-supported: \"none\"\r\n".getBytes("UTF-8"));
out.write("printer-is-accepting-jobs: \"true\"\r\n".getBytes("UTF-8"));
.....
....
out.flush();
После того, что, если я стараюсь читать входной поток для документа, он дает null, и на моем компьютере я получаю сообщение «Печать: подключен к принтеру», но если do out.close(); in, чтобы закрыть выходной поток для сокета, я получаю сообщение «неспособное получить статус принтера» на моем компьютере. Пожалуйста, помогите мне. Есть ли способ, которым я просто получаю документ, а не этот почтовый запрос или способ отправить правильный ответ и получить документ? Я застрял с этим довольно долгое время. Любая помощь высоко ценится.
Какая у вас просьба? Чего вы пытаетесь достичь? Что произойдет с припиской после вашего приложения? –
@PeterKandinsky Я пытаюсь использовать мой андроид, чтобы хранить все документы, которые я печатаю в течение дня. Я объявляю свое устройство с помощью NSDManager, используя тип сервиса «_ipp._tcp.». , Я ищу понимание IPP. Я посмотрел официальную документацию, это мало помогло. Если бы вы могли помочь мне понять связь между принтером и моим компьютером, это было бы здорово. – Zartha
предложение для вашего использования «сохранить документы на телефоне»: просто скопируйте на свой телефон документы (например, в формате pdf или любой формат поддержки мобильных приложений). Вы можете использовать облачный диск, такой как dropbox или приложение, которое поддерживает совместное использование файлов через FTP, SMB или WEBDAV, если вам не нравится копировать через USB. –