【问题标题】:Implementing my own remote desktop in java用java实现我自己的远程桌面
【发布时间】:2011-07-02 02:37:29
【问题描述】:
我正在尝试用 java 实现我自己的远程桌面解决方案。使用套接字和 TCP/UDP。
我知道我可以使用 VNC 或其他任何东西,但这是我想做的学校作业。
因此,对于移动鼠标和单击,我可以使用 Robot 类。我对此有两个问题:
发送视频怎么样?我知道 Robot 类也可以捕获屏幕,所以我应该按顺序发送图像并在连接的另一端按顺序显示吗?这是实现远程桌面的最佳方式吗?
我还应该使用 TCP 还是 UDP?
我认为 UDP 将更难实现,因为我必须弄清楚哪个图像在另一个之后。
【问题讨论】:
标签:
java
networking
desktop
【解决方案1】:
您正在尝试做的事情会奏效,但速度非常慢。图片在通过网络发送之前必须压缩。在压缩之前,应该减少颜色数量。此外,仅应发送自上次更新以来已更改的图像部分。
在传输鼠标坐标时,仅当新鼠标位置距离上一个位置超过 x 像素或超过 y 秒时,才会发生更新。否则,您会为鼠标位置花费太多流量,以至于没有空间放置图像。
UDP 将是这里的最佳解决方案,因为它对于视频流传输是最快的(这正是您正在做的事情)。
【解决方案2】:
大约2:
UDP 会更难,因为它是基于数据报的协议,一次可以发送多少数据是有限制的;您不太可能将整个图像放入单个数据报中。因此,您将不得不处理差异/部分更新,这很快就会变得复杂。
然而,TCP 是基于流的,仅按顺序传送数据。如果中间的一个数据包消失了,需要重新发送,所有后续的数据包都需要等待,即使它们已经被目标机器接收到。这会产生延迟,这在交互式应用程序中通常是非常不受欢迎的。
因此 UDP 可能是您的最佳选择,但您不能围绕可以一次发送整个图像的假设来设计它,您需要想出一种方法来仅发送部分图像。
【解决方案4】:
如果您使用 Google Protocol buffer 或 Apache thrift 会更好。您将发送更小的二进制数据 - 这样,您的软件将运行得更快。