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

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

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

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

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

【问题讨论】:

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

标签: java networking desktop


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    大约2:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2020-07-04
          • 2020-04-04
          • 1970-01-01
          • 1970-01-01
          • 2017-10-26
          • 2018-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多