2016-06-07 1 views
1

프린터로 안드로이드 폰을 사용하려고합니다. ServerSocket을 사용하여 인쇄 할 문서를 수신합니다. IP 주소와 포트를 제공하고 Generic Postscript Printer를 선택하여 IP 프린터로 전화기를 추가하면 ps 형식의 파일을 올바르게 수신 할 수 있습니다. 전화기를 IP 프린터로 추가하고 싶지 않습니다. 이제 NsdManager를 사용하여 장치를 프린터로 등록합니다. 자동으로 Bonjour 프린터로 인식되어 성공적으로 프린터로 추가 할 수 있습니다. 하지만 지금은 컴퓨터에서 문서를 인쇄 할 때마다 소켓의 입력 스트림에서이 데이터를 얻습니다. Bonjour (IPP)와 젯 다이렉트 소켓 프린터

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)는 응답에 계속 그 후이

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(); 

같은 모든 필요한 PARAMS 보내고, 그것을 제공 null이고 내 컴퓨터에서 "인쇄 중 : 프린터에 연결됨"메시지가 표시되지만 수행 할 경우 out.close(); 소켓의 출력 스트림을 닫으려면 "내 컴퓨터에서 프린터 상태를 가져올 수 없습니다"라는 메시지가 나타납니다. 도와주세요. 제가 방금 전 문서를 받았지만이 게시물 요청이나 올바른 응답을 보내고 문서를받는 방법이 있습니까? 나는 꽤 오랫동안 이것을 붙들고있다. 어떤 도움을 주셔서 감사합니다.

+0

당신의 유스 케이스는 무엇입니까? 무엇을 성취하려고합니까? 앱이 그것을 받으면 추후 스크립트로 어떤 일이 일어날까요? –

+0

@PeterKandinsky 하루 종일 인쇄하는 모든 문서를 보관하기 위해 안드로이드를 사용하려고합니다. 서비스 유형 "_ipp._tcp"를 사용하여 NSDManager를 사용하여 장치를 발표합니다. . 나는 IPP 이해를 찾고있다. 공식 문서를 보았지만별로 도움이되지 못했습니다. 프린터와 내 컴퓨터 간의 통신이 훌륭하다는 것을 이해할 수 있다면 도움이 될 것입니다. – Zartha

+0

"문서를 휴대 전화에 보관"하기위한 제안 : 휴대 전화에 문서 (예 : PDF 또는 모바일 앱이 지원하는 형식)를 복사하면됩니다. Dropbox와 같은 클라우드 드라이브 나 USB를 통해 복사하는 것을 원하지 않는 경우 FTP, SMB 또는 WEBDAV를 통한 파일 공유를 지원하는 앱을 사용할 수 있습니다. –

답변

1

마침내 구현할 수있었습니다. 다음은 Node.js를 사용하는 네트워크 프린터를위한 훌륭한 구현입니다. 또한이 비디오는 좋은 데모 https://www.youtube.com/watch?v=58Ti8w1yX2w

은 내가 내 안드로이드 휴대 전화에서 인쇄 요청을 처리하기 위해 https://github.com/NanoHttpd/nanohttpd을 사용하고

IPP https://github.com/watson/ipp-printer의 세부 사항을 설명합니다.

+1

***/Part1 : *** IMHO가 "일에 대해 잘못된 도구"를 사용하고 있다고해도 질문에 대한 답변을 upvoted. IPP는 인쇄 클라이언트와 인쇄 서비스 사이의 양방향 통신을 제공합니다 (컬러 또는 양면 인쇄와 관련된 서비스의 특정 기능을 쿼리하거나 인쇄 중 작업 진행 모니터링에 대한 스테이플 링/펀치 처리 완료 또는 작업 기록 조회 또는 시작/특정 대기열을 중지/일시 정지/다시 시작/생성/삭제). –

+0

***/Part2 : *** 그러나 유스 케이스에는 원격으로 그러한 기능이 필요하지 않습니다. 당신이 원하는 것을 위해,'_pdl-datastream._tcp'의 서비스 유형은 충분할 것입니다. * "shoot (port to 9100) and forget"*. 더 간단하고 훨씬 더 개발하고 유지하기가 쉽습니다. –

+0

@KurtPfeifle 감사합니다 – Zartha

1

귀하의 컴퓨터/CUPS (El Capitain이있는 Mac)는 IPP를 통해 인쇄하려고하지만 phone-print-device는 IPP를 구현하지 않습니다. 분명히, 그것은 작동하지 않을 것입니다.

해결 방법 1 :

올바른 설치를 CUPS 프린터를 추가합니다. 네트워크 프린터 CUPS에 대한 는 다음과 같은 기능을 제공합니다

  • IPP를 - HTTP
  • IPP - HTTPS
  • IPP - IPP
  • IPP - IPPS
  • SPOOLSS를 통해
  • LPD/LPR-호스트
  • Windows 프린터
  • AppSocket/HP JetDirect

선택 사항은 앱에서 구현했거나 지원할 계획 인 procotol에 따라 다릅니다. IPP는 ...을 제외하고, 당신을위한 옵션이 없습니다

해결 방법 2 :

이 "인쇄 - 서버 응용 프로그램"에서 IPP를 구현합니다. 그것은 힘든 일이 될 것입니다!

가 제대로 올바른 서비스 타입이어야 Bonjour Printing 1.2

_pdl-datastream._tcp를 통해 서비스를 발표 :

https://www.pwg.org/ipp/

해결 방법 3을 ... 구현 볼 수있는 많은있다. (7 장 참조)6, 대표 명칭)