用java实现我自己的远程桌面

Posted

技术标签:

【中文标题】用java实现我自己的远程桌面【英文标题】:Implementing my own remote desktop in java 【发布时间】:2011-07-02 02:37:29 【问题描述】:

我正在尝试用 java 实现我自己的远程桌面解决方案。使用套接字和 TCP/UDP。 我知道我可以使用 VNC 或其他任何东西,但这是我想做的学校作业。

因此,对于移动鼠标和单击,我可以使用 Robot 类。我对此有两个问题:

    发送视频怎么样?我知道 Robot 类也可以捕获屏幕,所以我应该按顺序发送图像并在连接的另一端按顺序显示吗?这是实现远程桌面的最佳方式吗?

    我还应该使用 TCP 还是 UDP? 我认为 UDP 将更难实现,因为我必须弄清楚哪个图像在另一个之后。

【问题讨论】:

@codymanix 和@unwind 有一些优点。只是为了补充它,如果您确实需要一些参考,请查看 jrdesktop.sourceforge.net 。它是一个基于 Java RMI 的解决方案。但首先尝试自己编写。祝你好运。 【参考方案1】:

您正在尝试做的事情会奏效,但速度非常慢。图片在通过网络发送之前必须压缩。在压缩之前,应该减少颜色数量。此外,仅应发送自上次更新以来已更改的图像部分

在传输鼠标坐标时,仅当新鼠标位置距离上一个位置超过 x 像素或超过 y 秒时,才会发生更新。否则,您会为鼠标位置花费太多流量,以至于没有空间放置图像。

UDP 将是这里的最佳解决方案,因为它对于视频流传输是最快的(这正是您正在做的事情)。

【讨论】:

【参考方案2】:

大约2:

UDP 会更难,因为它是基于数据报的协议,一次可以发送多少数据是有限制的;您不太可能将整个图像放入单个数据报中。因此,您将不得不处理差异/部分更新,这很快就会变得复杂。

然而,TCP 是基于流的,仅按顺序传送数据。如果中间的一个数据包消失了,需要重新发送,所有后续的数据包都需要等待,即使它们已经被目标机器接收到。这会产生延迟,这在交互式应用程序中通常是非常不受欢迎的。

因此 UDP 可能是您的最佳选择,但您不能围绕可以一次发送整个图像的假设来设计它,您需要想出一种方法来仅发送部分图像。

【讨论】:

【参考方案3】:

基本上,视频是按秒显示的一系列图像(帧)。您应该发送尽可能多的带宽。

另一方面,发送原始图像是没有意义的,你应该尽可能地压缩它,并且一定要考虑在这个过程中损失很多分辨率。

你可以看看这个SO question about image compression,如果你把它压缩得足够,你可能会有一个生动的视频。

【讨论】:

【参考方案4】:

如果您使用 Google Protocol buffer 或 Apache thrift 会更好。您将发送更小的二进制数据 - 这样,您的软件将运行得更快。

【讨论】:

以上是关于用java实现我自己的远程桌面的主要内容,如果未能解决你的问题,请参考以下文章

微软的远程桌面RD client怎么用

如何才能远程桌面连接

远程桌面延迟,ORACLE连接延迟,响应时间久怎么解决?

远程桌面连接怎么用,不用自带的远程桌面

远程桌面连接命令mstsc怎么用?

如何实现mac 远程桌面?