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 클라이언트
답변
휠을 학업 수행으로 다시 구현하는 경우 RFB protocol specification을 통해 프로토콜과 인코딩/디코딩 기술을 이해해야합니다.
원격 데스크톱 뷰어 (단순히 응용 프로그램에 포함될 수 있음)를 사용하려는 경우 프로토콜을 다시 구현하는 것보다 간단한 방법이 있습니다. Windows를 실행한다고 가정하면 외부 프로세스로 뷰어를 시작하고 기본 창 핸들 HWND을 잡고 SetParent을 사용하여 자신의 응용 프로그램의 하위 창으로 만들 수 있습니다. 대부분의 뷰어는 연결할 서버/포트를 전달할 수있는 명령 줄 args를 허용합니다.
적합해야하는 많은 자유 라이센스 하에서 (뷰어 또는 정적/동적 링크 라이브러리로서) 사용 가능한 많은 구현이 이미 있습니다. 그들 중 일부는 소스 형태로 사용할 수 있으며, 그들이 내가 찾을 수
몇 디코딩 부분을 설명하는 코드에서 몇 가지 의견이있을 수있다 :
- TightVNC
- UltraVNC
- 하지 않음 유용한 여전히 C++,하지만 VNCSharp
- TigerVNC
- libVNCServer/libVNCClient
비트 검색이 나를 this으로 안내했습니다.
서버는 사용자가 (클라이언트)가 수신 할 수있는 서버에 지시하는 인코딩의 데이터 만 전송합니다. 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"데이터를 요청할 수 있습니다.
- 1. 전자 메일 인코딩의 @ 문자
- 2. C# 다른 인코딩의 문자로 XML을 읽는 문제
- 3. 다른 인코딩의 문자열 비교
- 4. 직렬화 또는 인코딩의 부족
- 5. 이 인코딩의 유형은 무엇입니까?
- 6. ASCIIEncoding과 인코딩의 차이점
- 7. Charset 인코딩의 메모리 부족
- 8. MemoryStream UTF8 인코딩의 StreamReader
- 9. 모든 인코딩의 StreamWriting XML
- 10. mysql 인코딩의 이상한 버그
- 11. UTF 인코딩의 차이점은 무엇입니까?
- 12. Json 인코딩의 행 결합
- 13. 다른 인코딩의 문자열 비교
- 14. 인코딩의 BufferedImage (자바)
- 15. URL 퍼센트 인코딩의 경우
- 16. 삽입시 db.php에서 utf8 인코딩의 문제점
- 17. luaJSON 인코딩과 lbase64 인코딩의 차이점
- 18. PHP 바이트 인코딩의 기본 방법
- 19. 유니 코드 인코딩의 wchar_t 크기
- 20. URL 인코딩과 HTML 인코딩의 차이점
- 21. WebSocket을 사용한 Base64 인코딩의 대안
- 22. Dataset.ReadXml() - 주어진 인코딩의 문자가 잘못되었습니다
- 23. 다음 HL7 인코딩의 오류는 무엇입니까?
- 24. utf8 인코딩의 char 크기 확인
- 25. HttpClient를 - UrlEncodedFormEntity의 XML 인코딩의 NameValuePair는
- 26. UTF-8 인코딩의 파일 크기?
- 27. x264 인코딩의 텍스트 이미지 향상
- 28. C# 클라이언트 대 클라이언트 메시징
- 29. C#에서 클라이언트/서버 채팅 클라이언트 만들기
- 30. C# 클라이언트 서버 TCP 클라이언트 청취
통찰력에 감사드립니다. 예, TRLE은 잘 문서화되지 않았고 클라이언트 - 서버를 개발하는 데 성공했지만 이미지 스트림을 디코딩하는 데 사용되는 for 루프의 수가 너무 많아서 사용하기가 여전히 번거롭습니다. TRLE을 구현하면서 가장 큰 문제는 컬러 팔레트 데이터를 이해하고 그것이 필요한 이유입니다. 이것은 어디서나 문서 패치에 제공되지 않습니다. 난 확실히 zrle에 내 손을 시도 할 것 .. vnc를 개발 한 사람들과 나의 개인적인 의사 소통에 따라, zrle은 원격 연결에 대해보다 견고한 것 같습니다. –