J'essaie d'utiliser mon téléphone Android comme une imprimante. J'utilise ServerSocket pour recevoir le document à imprimer. Si j'ajoute mon téléphone en tant qu'imprimante IP en fournissant l'adresse IP et le port et que je sélectionne Imprimante PostScript générique, je peux recevoir le fichier au format ps correctement. Je ne veux pas ajouter mon téléphone comme imprimante comme imprimante IP. Alors maintenant, j'utilise NsdManager pour enregistrer mon appareil en tant qu'imprimante. Il est automatiquement reconnu comme imprimante Bonjour et je peux ajouter avec succès en tant qu'imprimante. Mais maintenant, chaque fois que j'imprime un document à partir d'un ordinateur, je reçois ces données dans le flux d'entrée du socket.Bonjour (IPP) vs Jetdirect-Socket Imprimante
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
J'ai lu la documentation IPP et je vous envoie 100 Continuer dans la réponse et tous les params nécessaires comme celui-ci
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();
Après que si je tente de lire le flux d'entrée pour le document, il donne null et sur mon ordinateur je reçois le message "Impression: Connecté à l'imprimante" mais si out.close(); pour fermer le flux de sortie pour le socket Je reçois le message "impossible d'obtenir le statut de l'imprimante" sur mon ordinateur. S'il vous plaît aidez-moi. Est-il possible que je reçoive simplement le document et pas cette demande de poste ou moyen d'envoyer une réponse correcte et obtenir le document? Je suis coincé avec cela depuis assez longtemps maintenant. Toute aide est grandement appréciée.
Quelle est votre utilisation? Qu'essayez-vous d'accomplir? Que va-t-il se passer avec le post-scriptum une fois que votre application l'aura reçu? –
@PeterKandinsky J'essaie d'utiliser mon android pour garder tous les documents que j'imprime pendant la journée. J'annonce mon périphérique en utilisant NSDManager en utilisant le type de service "_ipp._tcp". . Je cherche la compréhension d'IPP. J'ai regardé la documentation officielle, ça n'a pas beaucoup aidé. Si vous pouviez m'aider à comprendre la communication entre l'imprimante et mon ordinateur, ce serait génial. – Zartha
suggestion pour votre utilisation "conserver les documents sur le téléphone": il suffit de copier les documents (par exemple en format pdf ou n'importe quel format de votre application mobile) sur votre téléphone. Vous pouvez utiliser un lecteur de cloud comme Dropbox ou une application qui prend en charge le partage de fichiers via FTP, SMB ou WEBDAV si vous n'aimez pas copier via USB. –