c ++中的RFB / VNC客户端(TRLE编码)

时间:2016-08-26 22:48:27

标签: visual-c++ vnc vnc-viewer rfb-protocol

我在vc ++中创建一个vnc客户端,需要为TRLE编码方案制作它。我使用紧凑的vnc或真正的vnc作为我的服务器,它能够以TRLE(编码值= 15)发送数据。由于我是RFB和VNC的新手,我现在不确定如何读取我从服务器获取的数据(我知道服务器在消息类型0中使用x,y,w,h和encoding_type发送它)并解码数据。是否存在可用于理解RFB和解码技术实现的示例?我在github上找到了大部分ZRLE,Copyrect或Raw编码示例,这些解释并不清楚。

2 个答案:

答案 0 :(得分:0)

如果你(重新)实施轮子作为学术练习,你应该通过RFB protocol specification来理解协议和编码/解码技术。

如果您的目的是简单地拥有远程桌面查看器(可能嵌入在您的应用程序中),则有比重新实现协议更简单的方法。假设您运行Windows,您只需将查看器作为外部进程启动,抓住其主窗口句柄HWND并使用SetParent将其设置为您自己的应用程序的子窗口。大多数观众接受命令行参数,允许你传入服务器/端口连接。

在许多自由许可下,有许多实现可用(作为查看者或静态/动态链接库),这些实现应该是合适的。其中一些以源代码形式提供,并且可能在描述解码部分的代码中有一些注释

我能找到一些:

谷歌搜索引导我this

答案 1 :(得分:0)

服务器仅向您发送您(客户端)告诉您可以接收的服务器的编码数据。 由于TRLE(15)没有很好地记录,您可以从SetEncodings消息中删除它,而是使用更好记录的其他协议。

RFB协议的最佳(生活)文档如下:

https://github.com/rfbproto/rfbproto

目前(2017年9月)缺少任何TRLE文档,例如2009年的此补丁 https://www.mail-archive.com/tigervnc-rfbproto@lists.sourceforge.net/msg00235.html

从客户端到服务器的SetEncoding消息是客户端理解的协议列表,按优先选择顺序排列。 RAW数据总是可行的,但会使用最多的数据。

根据经验,使用最佳降压压缩实现的最简单的是带有原始矩形的ZRLE(16),大多数所有服务器或类似的ZLIB(6)都支持这种矩形。 p>

如果您连接的服务器仅支持TRLE而没有其他内容,那将是非常奇怪的,但在这种情况下,您仍然可以请求“只是RAW”数据。