我正在设计VNC服务器。根据标准的VNC / RFB协议,我得到一个包含x坐标,y坐标,宽度和高度的帧缓冲请求。我的服务器必须发送“仅更改的区域,即仅发送与客户端不同的矩形”。
我知道它已在“How RealVNC works?”中得到解答。但我的问题是 a)如何仅发送更改的矩形? b)我们如何知道更新必须以“这些”多个矩形发送?
同样的问题在“RFB Protocol : Send incremental framebuffer update”中提出,但没有回应...... 请帮我解决这个问题。我在C工作。
提前致谢。
答案 0 :(得分:0)
我认为你对这个标准感到有点困惑。
但是,如果由于某种原因客户端丢失了a的内容 它需要的特定区域,然后客户端发送一个 FramebufferUpdateRequest,增量设置为零(false)。这个 请求服务器发送指定区域的全部内容 尽快地。使用CopyRect不会更新该区域 编码
这意味着如果您收到增量请求,则会发送整个部分,因为客户端已经忘记了那里的内容。您可以使用您认为合适的任何矩形配置发送此部分。
如果客户端没有丢失该区域的任何内容 有兴趣的话,它会发送一个带增量的FramebufferUpdateRequest 设置为非零(true)。如果有特定的变化 在framebuffer的区域,服务器将发送一个FramebufferUpdate。
这意味着如果您收到非incrimtal请求(增量标志设置为true,我知道,它是哑巴),您发送屏幕上发生的任何更改。
b)我们如何知道更新必须在"这些"很多矩形?
您可以使用您希望的任何矩形组合发送更新。虽然我目睹了客户因在时髦的订单中发送更新而崩溃。但你可以发送1个矩形或1000个矩形,它取决于你。