我有一个问题,我实际上是在软件中重新编码RFB协议以与VNC服务器通信,并且我想知道如何获取服务器桌面大小的大小。
我已经准备好测试serverInit消息中的framebuffer_width,但是它不代表桌面的卷轴大小,我不知道该如何获取?

我的第二个问题是将PointerEvent消息发送到服务器。
要移动鼠标,实际上在我的软件中,我将鼠标的x和y设置为位置{0,0},当我将其发送到VNC服务器时,它可以成功工作,但是当我在x位置加5时,它就不能工作了。不能移动5像素,它的移动幅度要大于我想要的大小,我不明白为什么?你能帮我吗 ?

感谢您的回答!

最佳答案

听起来您的两个问题都可能是客户端中的扩展问题。

一些问题可能会帮助您回答自己的问题(因为如果您要确定的答案,确实需要发布更多信息):


您如何确定桌面的实际大小不是serverInit消息中发送的宽度?也许您正在启动VNC服务器,并假设它使用的大小与服务器上当前桌面的大小相同,而实际上是从不同的默认大小开始的。对于* nix系统上的VNC服务器,VNC服务器通常与主桌面作为独立的桌面运行,并且大小不一定相同。
您确定要将serverInit宽度和pointerEvent x和y位置视为16位值吗?
在ServerInit之后,您是否正在广告并获得DesktopSize伪编码?连接后,服务器可能会更改帧缓冲区的大小。
您使用什么语言/框架/等来实现客户端。您确定渲染功能没有以某种方式缩放吗?


顺便说一句,我发现official RFB documentation有点缺乏,我认为这些链接对于RFB参考更好:


http://tigervnc.sourceforge.net/cgi-bin/rfbproto
https://datatracker.ietf.org/doc/draft-levine-rfb/

07-24 09:45