标签: remote-desktop

TeamViewer如此快速?

抱歉长度,这是必要的.

介绍

我正在使用C#4.0 for Windows Vista/7开发一个远程桌面软件(只是为了好玩).我已经遇到了基本障碍:我有一个强大的UDP消息系统,相对干净的程序设计,我有一个镜像驱动程序(来自DemoForge的免费DFMirage镜像驱动程序)启动并运行,我已经为所有人实现了NAT遍历除对称NAT之外的NAT类型(存在于公司防火墙情况下).

关于屏幕传输/共享,由于镜像驱动程序,我会自动通知已更改的屏幕区域,我可以简单地将镜像驱动程序不断变化的屏幕位图封送到我自己的位图.然后我将屏幕区域压缩为PNG并将其从服务器发送到我的客户端.事情看起来很不错,但还不够快.它和VNC一样慢(顺便说一下,我不使用VNC协议,只是一个自定义的业余协议).

从最慢的远程桌面软件到最快的,列表通常从所有类似VNC的实现开始,然后爬到Microsoft Windows远程桌面......然后...... TeamViewer.对CrossLoop,LogMeIn不太确定 - 我没有使用它们,但TeamViewer 非常快.它真的很直播.我tree在命令提示符上运行了一个命令,它以20毫秒的延迟更新.我可以浏览网页比我的笔记本电脑慢几毫秒.在Visual Studio中垂直滚动代码的延迟时间为50毫秒.想想TeamViewer的屏幕传输解决方案必须具备多么强大的功能才能实现这一切.

VNC使用基于轮询的钩子来检测屏幕变化和暴力屏幕捕获/比较最坏的情况.在最好的情况下,他们使用像DFMirage这样的镜像驱动程序.我在这个级别.他们使用称为RFB协议的东西.

Microsoft Windows远程桌面显然比VNC高出一步.我从StackOverflow的某个地方听说,Windows远程桌面不会发送屏幕位图,而是发送实际的绘图命令.这非常棒,因为它可以发送简单的文本(在此坐标处绘制此矩形并使用此渐变对其进行着色)!远程桌面确实非常快 - 而且它是在家工作的标准方式.它使用了一种称为RDP协议的东西.

现在TeamViewer对我来说是一个完全的谜.显然,他们发布了第2版的源代码(截至2012年2月,TeamViewer版本为7).人们已经阅读过它并说版本2没用 - 它只是对VNC进行自动NAT遍历的一些改进.

但版本7 ......现在它的速度非常快.我的意思是,它实际上比Windows远程桌面更快.我用TeamViewer流式传输DirectX 3D游戏(1 fps,但Windows远程桌面甚至不允许DirectX运行).

顺便说一句,TeamViewer在没有镜像驱动程序的情况下完成所有这些操作 有一个选项可以安装一个,它会更快一点.

问题

我的问题是,TeamViewer如此快速?一定不可能.如果你在24位深度(16位深度显然很难看)的情况下获得1920 x 1080分辨率,那么原始数据仍为6,220,800字节.即使使用libjpeg-turbo(大公司使用的最快的JPG压缩库之一),将其压缩到30KB(让我们非常慷慨),也需要时间来通过TeamViewer的服务器(TeamViewer通过简单地代理流量来绕过公司的Symmetric NAT)他们的服务器).并且libjpeg-turbo压缩需要时间来压缩.对于我来说,高质量的JPG压缩需要175毫秒才能获得完整的1920 x 1080截图.如果主机的计算机运行Atom处理器,那么这个数字会上升.我根本不明白TeamViewer如何很好地优化了他们的屏幕传输.同样,小尺寸图像可能会被高度压缩,但需要至少几十毫秒来压缩.大尺寸图像不需要时间压缩,但需要很长时间才能完成.不知何故,TeamViewer完成整个过程以获得大约每秒20-25帧.我使用过网络监视器,TeamViewer在500 Kbps和1 Mbps的速度下仍然没有时滞(VNC软件在该传输速率下滞后几秒钟).在我的tree命令提示符测试期间,TeamViewer以1 Mbps的速率接收入站数据,仍然运行5-6 fps.VNC和远程桌面不这样做.又怎样?

答案有点复杂和错综复杂,所以如果你只是说它是因为他们使用UDP而不是TCP(请你认为他们确实使用TCP就像成功一样),请不要发布0.02美元.

我希望在StackOverflow上有一个TeamViewer开发人员.

潜在的答案

一旦人们回复,将更新此内容.

  1. 首先,我的想法是TeamViewer具有非常好的网络控制.例如,他们将大数据包拆分到MTU大小之下,从不浪费旅行.它们可能具有各种奇特的钩子来检测屏幕变化以及极快的XOR图像比较.

performance operating-system udp network-programming remote-desktop

155
推荐指数
4
解决办法
14万
查看次数

远程桌面连接协议错误0x112f

当我尝试使用远程桌面连接连接到Windows 2012 Server时,我已连接约1秒钟.然后与以下错误断开连接:

由于协议错误(代码:0x112f),远程会话将被断开.

直到昨天,连接工作正常,没有错误,没有服务器更改.我之前从未见过这个错误.我试图降低体验面板中的视觉外观设置(找到类似错误的可能解决方案),但没有结果.

remote-desktop windows-server-2012

25
推荐指数
4
解决办法
5万
查看次数

在远程桌面上运行时替代SendKeys?

我有一个应用程序通过SendKeys将键击注入应用程序.

不幸的是,当我通过远程桌面运行它时,应用程序将无法运行,因为众所周知的问题是SendKeys不能与远程桌面一起使用.

有没有人以前解决过这个问题,或者对如何解决这个问题有任何好的建议?

rdp remote-desktop sendkeys

24
推荐指数
2
解决办法
2万
查看次数

无法远程桌面进入Windows Azure VM

我正在运行Windows Azure试用版并设置一个简单的Windows虚拟机.但是,我似乎无法使用Windows远程桌面连接远程进入机器.我究竟做错了什么?乍一看它似乎不喜欢我的用户名和密码.但后来我也无法ping通VM地址.我不想通过VS或任何其他工具,我喜欢通过Windows RMD工具进行简单的远程桌面连接.

windows remote-desktop virtual-machine azure

19
推荐指数
1
解决办法
4万
查看次数

远程桌面的Unity模式

我通常会同时进行多个远程桌面会话.在这些会话中,我可能会运行不同的应用程序 VMware Workstation具有Unity模式,允许您将来宾应用程序与主机集成.我希望能够为远程桌面会话做同样的事情.

如果我可以指向远程桌面会话上的应用程序并将其与我的主桌面"统一",那将真正提高生产力.这将使应用程序免于被限制进入限制远程桌面窗口的暴政.

有谁知道第三方实用程序使这成为可能吗?

utilities rdp remote-desktop

18
推荐指数
2
解决办法
1万
查看次数

Oracle VirtualBox"在BIOS中禁用了VT-x"

从Oracle虚拟盒加载图像时出现此错误.我该如何解决?我通过远程桌面连接将虚拟机4.3.12安装到Windows 7 64位,32G RAM计算机上.

在此输入图像描述

我查看了英特尔可视化设置,它对硬件可视化说"是". 在此输入图像描述

我在网上看到这个问题看起来像是同一个问题.但我正在使用远程桌面控制,所以我无法在重启页面上更改设置.重新启动此计算机时,我将自动注销.

从Oracle虚拟框启动映像时,VERR_VMX_MSR_VMXON_DISABLED

virtualbox remote-desktop remote-access bios

18
推荐指数
1
解决办法
5万
查看次数

用于切换“退出”Citrix Workspace Desktop Viewer 会话的键盘快捷键

背景

我正在使用 Citrix Workspace(版本 20.2.0.25(2002))中的 Desktop Viewer 功能从家庭计算机访问我的工作计算机。

要求

我希望能够更轻松地从(全屏)远程会话切换本地桌面。

目前,我只能通过远程会话屏幕顶部的控制栏来完成此操作,这开始让人感到乏味。 Citrix 会话控制栏

Alt+Tab不起作用,因为它仅在会话打开时切换远程会话中的应用程序。

是否通过根据Alt+Tab需要开始工作、最小化会话窗口的热键或其他方法来完成切换对我来说并不重要。

我尝试过的

网上有很多问题解决如何在远程会话中启用但不禁 它。当然,我尝试按照这些说明进行相反的操作,但没有成功。他们通常建议在本地计算机的注册表中进行设置,所以我认为我的应该有Alt+TabTransparentKeyPassthrough=RemoteRemote已经设置了,我只需要清除它或用其他东西替换它,但我的是空值。

我已经浏览了 Citrix Workspace 和远程会话首选项中的所有选项,但没有关于启用/禁用/设置热键的信息。

我尝试了此Citrix 支持页面的“通过 ICACLIENT.ADM 模板禁用热键” ,但无法找到它们引用的 icaclient 模板文件。

我已联系公司的服务台,但他们不知道任何解决方案。

accessibility remote-desktop citrix citrix-access-gateway

18
推荐指数
3
解决办法
3万
查看次数

读取另一个进程正在使用的日志文件

目标

我想按下GUI上的按钮并从远程计算机读取seclog.log文件(symantec AV日志),并将日志内容显示在我的应用程序中的富文本框中.

有用的东西

一切,但阅读日志文件

错误信息

System.IO.IOException was unhandled
Message=The process cannot access the file '\\HOSTNAME\C$\Program Files (x86)\Symantec\Symantec Endpoint Protection\seclog.log' because it is being used by another process.
Source=mscorlib
Run Code Online (Sandbox Code Playgroud)

//possible seclog paths
        String seclogPath1 = @"\\\\" + target + "\\C$\\Program Files (x86)\\Symantec\\Symantec Endpoint Protection\\seclog.log";
        String seclogPath2 = @"\\\\" + target + "\\C$\\Program Files\\Symantec\\Symantec Endpoint Protection\\seclog.log";

        //if seclog exists
        if (File.Exists(seclogPath1))
        {
            //output.AppendText("file exists at " + seclogPath1);
            //var seclogContent = File.Open(seclogPath1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

            Stream stream = File.OpenRead(seclogPath1);
            StreamReader …
Run Code Online (Sandbox Code Playgroud)

c# remote-desktop file

17
推荐指数
1
解决办法
2万
查看次数

通过Windows远程桌面(tsclient)编写Java时创建HUGE文件

当我们的Swing应用程序通过Windows远程桌面将文件写入用户本地计算机时,我们的客户报告了一个非常奇怪的问题(该应用程序托管在用户连接的终端服务器上).

流程是:

  • 用户通过远程桌面登录并运行应用程序(C:\包含在"本地资源"中)
  • 在工作时,他们将数据从数据库导出到文件中
  • 用户选择要导出的数据
  • 用户在本地计算机上选择目标文件 \\tsclient\C\Temp\TestFile.txt
  • 文件可能很大,因此从数据库中提取1000行并按批次写入文件
  • 在第二批,当Java打开文件并再次写入文件时,一些非常奇怪的东西开始发生!
    • 文件大小迅速增加,停止在2 GB左右
    • 然后继续将数据写入文件

我不确定这是核心Java库,远程桌面实现还是组合中的问题.我们的应用程序也通过Citrix托管,工作正常,写入本地磁盘或UNC网络路径也可以正常工作.

我已经创建了一个SSCCE来演示这个问题,用远程桌面连接到计算机(确保C:\是"本地资源")并运行该程序以查看一些非常奇怪的行为!我正在使用JDK-7u45.

import static java.nio.file.StandardOpenOption.APPEND;
import static java.nio.file.StandardOpenOption.CREATE;
import static java.nio.file.StandardOpenOption.TRUNCATE_EXISTING;
import static java.nio.file.StandardOpenOption.WRITE;

import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.file.Files;
import java.nio.file.OpenOption;
import java.util.Collections;

/**
 * Demonstrates weird issue when writing (appending) to a file over TsClient (Microsoft Remote Desktop).
 * 
 * @author Martin
 */
public class WriteOverTsClientDemo
{
    private static final …
Run Code Online (Sandbox Code Playgroud)

java windows file-io remote-desktop

17
推荐指数
1
解决办法
1159
查看次数

键盘快捷键可以远离全屏远程桌面会话

全屏使用远程桌面,移动到另一个应用程序的最短途径是什么?(当然,不使用鼠标.我讨厌老鼠).

我目前使用以下之一:

ctrl- alt- del,alt- t(到本地机器的taskmgr),alt- tab(移动到所需的应用程序),或: ctrl- alt- pause(将远程桌面切换到窗口),alt- tab.

有更短的方式吗?

windows remote-desktop keyboard-shortcuts

16
推荐指数
2
解决办法
2万
查看次数