如何用java编写自己的桌面共享应用程序?

发布于 2024-08-26 08:15:34 字数 585 浏览 6 评论 0原文

你好,我想用 Java 编写自己的桌面共享应用程序。

该应用程序应该具有一些非常默认的功能:

  • 捕获屏幕;

  • 允许远程连接的用户单击/编辑字段。

我想使用 Java 机器人 鼠标移动/按键类。 问题是我不知道要使用什么屏幕捕获策略。

我是否应该每秒顺序进行屏幕捕获(在主机计算机上),并通过网络使用 UDP 发送这些捕获,以便客户端可以拦截数据报?这对网络来说是不是有点过分了?

还有哪些其他可用策略? (除非尝试现有的应用程序)。

PS:如果有必要,我什至可以使用 JNI 编写本机代码(但这仍然是我计划做的最后一件事)。

稍后编辑: 经过一番调查,我得出了 @Thorbjørn Ravn Andersen 的结论。 Java 可能不是此类应用程序的最佳选择。我可以尝试使用 JNI,但该代码将覆盖我项目的 75% 以上。

我会尝试寻找其他替代方案。

Hello I want write my own desktop sharing application in Java.

The application should have some very default features:

  • Capture screen;

  • Allow a remote connected user to click / edit fields.

I was thinking to use Java Robot class for mouse movements / key pressing.
The problem is i don't know what screen capture strategy to use.

Should I make sequentially screen captures (on the hosting computer) every second, and send those captures with UDP via network, so that the clients can intercept the data-grams ? Isn't this a little overkill for the network ?

What other strategies are available ? (Except trying an already existing app).

PS: If necessary I can even write native code using JNI (still that's the last thing I planning to do).

Later edit:
After some investigation I've come to the conclusion of @Thorbjørn Ravn Andersen . Java is probably not the best choice for this kind of application. I can try to use JNI, but that code will cover 75%+ of my project.

I will try to find other alternatives.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

扛起拖把扫天下 2024-09-02 08:15:34

仔细查看 SourceForge 上的 Ultra VNC 项目。很好的起点。

Have a good long look at the Ultra VNC project on SourceForge. Great place to start.

dawn曙光 2024-09-02 08:15:34

在纯Java中,您无法访问系统窗口上的结构化信息,也无法监视所有相关的系统事件,因此显示同步的性能将不是最佳的。还有特权窗口,它们不接受来自机器人的鼠标或按键事件。远程视频流不是一个选择!

通过命名限制,您对 Robot 类的尝试是有效的。
Robot.createScreenCapture(Rectangle) 会将桌面部分放入 BufferedImage 中,您可以将其发送到客户端窗口。
在客户端,您可以捕获键盘和鼠标事件并将它们发送到服务器端的机器人对象。

在不知道系统窗口的实际范围的情况下,在桌面图块网格上工作是有意义的:

  • 捕获的图块 BufferedImage-s 可能适合传输协议的缓冲区。
  • 捕获周期可以针对具有高熵的图块进行局部优化(->捕获策略)。

进一步流量最小化

  • 考虑后续桌面内容的差异,仅
  • 通过 PNG 或类似 PCX 的方法压缩图块

对于通过互联网共享,可以通过

  • 公共代理服务器
  • UDP 打孔建立点对点连接,用于连接建立,必要的公共中介服务器

在任何情况下,都需要保护协议并声明交付。

In pure Java you cannot access structured information on system windows, nor monitor all relevant system events, so the performance of the display synchronization will not be optimal. Also there are privileged windows, which do not accept mouse or key events from Robot. Remote video streaming is not an option!

With named restrictions your attempt with the Robot class is valid.
Robot.createScreenCapture(Rectangle) will put a Desktop section into a BufferedImage, which you can send to the client window.
On client side you can capture keyboard and mouse events and send them to a Robot object on the server side.

Without knowing the actual extent of system windows, it will makes sense to work on a grid of Desktop tiles:

  • captured BufferedImage-s of tiles may fit into the buffer of the transfer protocol.
  • capturing period may locally be optimized for tiles with high entropy (-> Capturing Strategy).

Further traffic minimization

  • Consider differences of subsequent Desktop contents, only
  • Compression of tiles by PNG or a PCX-like method

For sharing over internet, Peer-to-Peer connection may be established by

  • a public proxy server
  • UDP hole punching with, for connection establishing, a necessarily public mediator server

In any case the protocol needs to be secured and delivery asserted.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文