1

我正在设计一个 VNC 服务器。根据标准 VNC/RFB 协议,我得到一个帧缓冲区请求,其中包含 x 坐标、y 坐标、宽度和高度。我的服务器必须发送“仅更改区域,即仅发送与客户端不同的矩形”。

我知道它已经在“ RealVNC 如何工作? ”中得到了回答。但我的问题是 a) 我如何只发送已更改的矩形?b) 我们如何知道必须在“这些”许多矩形中发送更新?

在“ RFB 协议:发送增量帧缓冲区更新”中也提出了同样的问题,但没有回应。请帮我解决这个问题。我在 C 工作。

提前致谢。

4

1 回答 1

0

我认为您对标准有些困惑。

RFB 标准

但是,如果由于某种原因客户端丢失了它需要的特定区域的内容,则客户端发送一个 FramebufferUpdateRequest,增量设置为零(假)。这要求服务器尽快发送指定区域的全部内容。该区域不会使用 CopyRect 编码进行更新

这意味着如果您收到增量请求,您将发送整个部分,因为客户端已经忘记了那里的内容。您可以以您认为合适的任何矩形配置发送此部分。

RFB 标准

如果客户端没有丢失它感兴趣的区域的任何内容,那么它发送一个 FramebufferUpdateRequest,增量设置为非零(真)。如果并且当帧缓冲区的指定区域发生更改时,服务器将发送 FramebufferUpdate。

这意味着如果你收到一个非隐式请求(增量标志设置为 true,我知道,它是愚蠢的),你会发送屏幕上发生的任何更改。

b) 我们如何知道必须在“这些”许多矩形中发送更新?

您可以使用您希望的任何矩形组合发送更新。尽管我目睹了客户因发送时髦订单的更新而崩溃。但是您可以发送 1 个矩形或 1000 个矩形,这取决于您。

于 2014-06-18T22:14:04.437 回答