2016-08-26 3 views
0

vC++에서 vnc 클라이언트를 만들고 있는데 TRLE 인코딩 스키마로 사용해야합니다. TRLE (인코딩 값 = 15)에서 데이터를 전송할 수있는 제 서버로서 타이트한 vnc 또는 실제 vnc를 사용하고 있습니다. RFB와 VNC에 익숙하지 않아서 서버에서 데이터를 읽는 방법을 잘 모르겠습니다. 서버가 x, y, w, h 및 encoding_type을 사용하여 메시지 유형 0으로 보내고 디코딩하는 것을 알고 있습니다. 자료. RFB 및 디코딩 기술의 구현을 이해하는 데 사용할 수있는 예제가 있습니까? 나는 대부분 ZRLE, Copyrect 또는 Raw 인코딩 예제를 github에서 발견했으며 설명에 대해서는 명확하지 않았습니다.C++ (TRLE 인코딩)의 RFB/VNC 클라이언트

답변

0

휠을 학업 수행으로 다시 구현하는 경우 RFB protocol specification을 통해 프로토콜과 인코딩/디코딩 기술을 이해해야합니다.

원격 데스크톱 뷰어 (단순히 응용 프로그램에 포함될 수 있음)를 사용하려는 경우 프로토콜을 다시 구현하는 것보다 간단한 방법이 있습니다. Windows를 실행한다고 가정하면 외부 프로세스로 뷰어를 시작하고 기본 창 핸들 HWND을 잡고 SetParent을 사용하여 자신의 응용 프로그램의 하위 창으로 만들 수 있습니다. 대부분의 뷰어는 연결할 서버/포트를 전달할 수있는 명령 줄 args를 허용합니다.

적합해야하는 많은 자유 라이센스 하에서 (뷰어 또는 정적/동적 링크 라이브러리로서) 사용 가능한 많은 구현이 이미 있습니다. 그들 중 일부는 소스 형태로 사용할 수 있으며, 그들이 내가 찾을 수

몇 디코딩 부분을 설명하는 코드에서 몇 가지 의견이있을 수있다 :

비트 검색이 나를 this으로 안내했습니다.

0

서버는 사용자가 (클라이언트)가 수신 할 수있는 서버에 지시하는 인코딩의 데이터 만 전송합니다. TRLE (15)의 문서화가 잘되어 있지 않기 때문에 SetEncodings 메시지에서 삭제하고 더 잘 문서화 된 다른 프로토콜을 사용할 수 있습니다.

RFB 프로토콜에 대한 가장 좋은 (생활) 문서는 여기에 있습니다 : 이것은 현재와 같은 2009 https://www.mail-archive.com/[email protected]/msg00235.html

에서이 패치 같은 TRLE 문서를 누락 (2017 9월)

https://github.com/rfbproto/rfbproto

입니다 클라이언트에서 서버로의 SetEncoding 메시지는 클라이언트가 이해할 수있는 프로토콜의 목록이며, 선호하는 순서에 따라 선택됩니다. RAW 데이터는 항상 가능하지만 대부분의 데이터를 사용합니다.

경험상 가장 좋은 bang-for-the-buck 압축으로 구현하는 가장 쉬운 방법은 대부분의 서버 또는 유사한 ZLIB (6)에서 지원되는 원시 사각형이있는 ZRLE (16)입니다.

연결하려는 서버가 TRLE 만 지원하고 다른 것은 지원하지 않으면 매우 이상 할 것입니다.하지만이 경우에도 "그냥 RAW"데이터를 요청할 수 있습니다.

+0

통찰력에 감사드립니다. 예, TRLE은 잘 문서화되지 않았고 클라이언트 - 서버를 개발하는 데 성공했지만 이미지 스트림을 디코딩하는 데 사용되는 for 루프의 수가 너무 많아서 사용하기가 여전히 번거롭습니다. TRLE을 구현하면서 가장 큰 문제는 컬러 팔레트 데이터를 이해하고 그것이 필요한 이유입니다. 이것은 어디서나 문서 패치에 제공되지 않습니다. 난 확실히 zrle에 내 손을 시도 할 것 .. vnc를 개발 한 사람들과 나의 개인적인 의사 소통에 따라, zrle은 원격 연결에 대해보다 견고한 것 같습니다. –