在java中实现我自己的远程桌面

时间:2011-02-22 15:46:37

标签: java networking desktop

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

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

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

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

4 个答案:

答案 0 :(得分:9)

你想做的事情会奏效,但速度极慢。在通过网络发送图像之前,图像必须压缩。在压缩之前,应该减少颜色数。此外,只应发送自上次更新以来部分已更改

传输鼠标坐标时,只有当新的鼠标位置距离最后一个位置超过x像素或者y秒数结束时才会发生更新。否则,您为鼠标位置花费了大量流量,因此没有图像空间。

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

答案 1 :(得分:3)

关于2:

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

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

所以UDP可能是你最好的选择,但你不能设计它,假设你可以一次发送整个图像,你需要想出一种方法来发送部分图像。

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

如果您使用Google协议缓冲区或Apache thrift会更好。您将发送更小的二进制数据 - 这样,您的软件将更快地运行。