2016-08-26 19 views
0

私はvC++でvncクライアントを作成しており、TRLEエンコーディングスキーム用に作成する必要があります。私はTRLE(エンコーディング値= 15)でデータを送信することができる私のサーバーとしてタイトなvncまたは実際のvncを使用しています。私はRFBとVNCに新しいので、私はどのように私はサーバーから取得しているデータを読み取る(私はサーバーがx、y、w、hとencoding_typeでメッセージタイプ0でそれを送信することを認識している)とデコードデータ。 RFBとデコード技術の実装を理解するために使用できる例はありますか?私は主にZRLE、CopyrectまたはRawのエンコーディングの例をgithubで見つけましたが、その説明は十分にはっきりしていませんでした。RFB/VNCクライアント(C++)(TRLEエンコーディング)

答えて

0

学問的な練習としてホイールを実装する場合は、RFB protocol specificationを参照して、プロトコルとエンコード/デコードのテクニックを理解する必要があります。

リモートデスクトップビューア(アプリケーション内に埋め込まれている可能性があります)を単純に作成する場合は、プロトコルを再実装するより簡単な方法があります。あなたがWindowsを実行していると仮定すると、単に外部プロセスとしてビューアを起動し、メインウィンドウのハンドルHWNDをつかみ、SetParentを使って自分のアプリケーションの子ウィンドウにすることができます。ほとんどの視聴者は、サーバー/ポートに接続するためのコマンドライン引数を受け入れます。

多くのリベラルなライセンスの下で(視聴者または静的/動的リンクライブラリとして)利用可能な多くの実装が既に存在します。そのうちのいくつかは、ソース形式で利用可能であり、彼らが復号部

私は見つけることができるいくつかを記述したコードでいくつかのコメントを持っている可能性のあるです:

ビットのGoogle検索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-thes圧縮を実装する最も簡単な方法は、ほとんどのすべてのサーバーまたは同様のZLIB(6)でサポートされている未処理の長方形のZRLE(16)です。

接続しているサーバーがTRLEのみをサポートしていて、それ以外の場合は非常に奇妙ですが、その場合でも「ただのRAW」データを要求できます。

+0

洞察に感謝します。はい、TRLEはあまりよく文書化されていません。クライアントサーバーの開発に成功している間は、イメージストリームをデコードするために使用されるfor-loopの数のために使用するのが面倒です。 TRLEを実装する際の私の最大の問題は、カラーパレットのデータを理解することと、それがなぜ必要なのかということでした。これはまだどこのドキュメントパッチでも提供されていません。私は確かにzrleに私の手を試してみるだろう.. vncを開発した人々と私の個人的なコミュニケーションごとに、zrleはリモート接続のためのより堅牢なようです。 –

関連する問題