0

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

4

2 回答 2

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)。

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

于 2017-09-12T01:15:27.147 回答
0

如果您(重新)将轮子实现为学术练习,您应该阅读 RFB 协议规范以了解协议和编码/解码技术。

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

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

我能找到一些:

谷歌搜索让我知道了这一点

于 2016-08-26T23:55:16.237 回答