- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们的团队正在 Windows 上实现 VNC 查看器(=VNC 客户端)。该协议(protocol)(称为 RFB)是有状态的,这意味着查看器必须读取 1 个字节,查看它是什么,然后再读取 3 或 10 个字节,解析它们,等等。
我们决定使用异步套接字和单个 (UI) 线程。因此,有两种方法:
1) 状态机——如果我们在套接字读取时遇到阻塞,只需记住当前状态并退出。稍后,套接字通知将到达,中断的逻辑将从适当的阶段恢复;
2) 内部消息循环——一旦我们确定从套接字读取会阻塞,我们就进入内部消息循环并在那里旋转,直到最终收到所有必要的数据。因此,在出现阻塞时,UI 不会被卡住。
经验表明,第二种方法不好,因为当我们处于内部消息循环中时,任何消息都可能到来。我不能在这里说出完整的故事,但它根本不够可靠。崩溃和故障。
第一种方案似乎还可以接受,但以这种风格编程并不容易。必须记住算法的状态和进一步处理所需的所有局部变量的值。
这很可能使用多线程,但我们只是认为这种情况下的问题会更加困难:帧缓冲区访问的同步、多线程问题等。此外,即使在这种变体中似乎也有必要使用异步套接字。
那么,您认为哪种方式最好?
这个问题很普遍。这就是通过有状态协议(protocol)组织异步通信的问题。
编辑 1:我们使用 C++ 和 MFC 作为 UI 框架。
最佳答案
我做过几个并行计算项目,看起来 MPI(消息传递接口(interface))可能对您的 VNC 项目有帮助。您可能对 MPI 提供的并行计算能力不太感兴趣,但您可能希望使用简化的类似套接字的接口(interface)通过网络进行异步通信。
您可以从 google 中找到 MPI 的其他实现和大量使用示例。
关于c++ - VNC 查看器实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11385432/
嗨,需要使用任何脚本(最好是 php 但任何 perl 都可以)生成 vnc 密码。 问题是“vncpasswd”需要交互式用户操作(提示输入密码和密码验证)。 有没有办法在没有提示的情况下生成它?
Centos7与Centos6.x有了很大的不同。 为了给一台服务器装上远程桌面,走了不少弯路。写这篇博文,纯粹为了记录,以后如果遇到相同问题,可以追溯。 1、假定你的系统没有安装vnc的任何软
我正在使用 Guacamole VNC Web 客户端查看器,我想隐藏本地浏览器光标,否则你会看到两个光标,这会让人感到困惑。 我可以使用简单的样式隐藏浏览器鼠标: cursor:none; 但这不太
我想创建一个 VNC session 来公开我在虚拟显示器上启动的单个应用程序。我想用 x11vnc 来做,因为之后我可以通过 noVNC 公开它。 问题是 x11vnc 允许我创建一个虚拟显示器:
我设置autoport=yes在域的(libvirt 中的“虚拟机”)配置文件中,因此 VNC 端口在运行时自动分配。 我需要得到这个端口,这样我才能从外部连接到虚拟机,但我找不到合适的 API 来做
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
我知道我可以使用 Selenoid-UI 使用我的浏览器连接到正在运行的 webdriver 容器。但是是否可以使用其中一个 VNC 客户端连接到容器? 最佳答案 两种可能的方式: 1) 按如下方式启
所以当我通过vnc连接我的电脑时,主机显示640x480的分辨率。转到屏幕分辨率,显示设置为“显示设备:移动 PC 显示” 主机没有插入显示器,但这甚至无关紧要,因为我使用tightvnc客户端使用v
我正在使用VNC连接到远程系统(客户端上为tigervnc-1.1.0,服务器上为RealVNC-4.1.2)。客户端系统有两个使用Nvidia twinview的监视器,有效分辨率为3200x120
我为四个项目(所有带有 ubuntu 15.04 主机的 VMware Player VM)获得了 4 个开发虚拟机,每个项目分别运行 VNC(端口 5900、5901、5902、5903)。 我下载
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我在我的 Ubuntu 18.04 电脑上安装了 VNC 服务器,但是我无法启用云连接。根据文档,我需要使用 sudo 运行命令以服务模式启动 VNC 服务器。所以我尝试了这个命令: sudo sys
我想知道 RealVNC 远程查看器是如何工作的。 它经常实时向客户端发送屏幕截图? 还是使用其他方法? 最佳答案 作为一个非常高级的概述,有两种类型的 VNC 服务器: 抓屏。这些服务器会将当前显示
我们的团队正在 Windows 上实现 VNC 查看器(=VNC 客户端)。该协议(protocol)(称为 RFB)是有状态的,这意味着查看器必须读取 1 个字节,查看它是什么,然后再读取 3 或
我从它的网站上下载了tight vnc源代码。现在我想在它的可执行文件上使用 gdb。调试器成功地在函数上添加了断点,但是当我尝试逐步执行该函数时,它说: Single Stepping until
我有一个 VNC 服务器 在我的 linux 机器上启动。 VNC 服务器使用多少内存? 如果我在同一台机器上创建多个 VNC 服务器 并且长时间不使用其中的几个。作为未使用的进程,操作系统是否将它们
我正在尝试像这样运行模拟器: emulator -avd name -qemu -vnc :4 我得到一个错误: Could not read keymap file: 'en-us' 是模拟器的错误
有没有人知道可以从网页运行的开源 Java VNC 服务器,因此不需要在服务器端安装,可能基于 applet。 最佳答案 签名的 Java 小程序(或应用程序)可以使用 Robot 类获取当前窗口的屏
是否有任何用于 Java 的 VNC 库,我需要构建一个基于 JSP/Servlet 的 VNC 服务器,以允许用户与帮助台共享他们的桌面。我见过 jVNC,但我想自己构建它,用于大学项目。 特别是,
我是一名优秀的程序员,十分优秀!