- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有几个智能设备,它们使用.NETCF 3.5编写的应用程序运行Windows CE5。智能设备通过集成的GPRS调制解调器连接到Internet。我的客户希望使用远程支持选项,但VNC和类似工具似乎无法完成这项工作。我发现VNC出现了几个问题,使其无法正常工作。首先,在智能设备上运行时,它存在严重的性能问题。第二个问题是,互联网提供商有一个防火墙,可以阻止所有传入的请求,如果它们不是来自智能设备本身。因此,由于请求不是来自智能设备,因此无法启动与智能设备的远程桌面会话。
我们可以得到自己的APN,但是它们太昂贵了,并且每月的费用对于我们部署的智能设备的数量来说太高了。如果我们可以将开发成本添加到初始产品成本中,对我们而言更经济,因为我们的客户不喜欢高昂的每月成本,而是愿意支付大量的预付款。远程支持解决方案还将使我们能够最大程度地减少现场支持。
这就是为什么我们或多或少决定推出自己的远程桌面解决方案的原因。我们具有用于在智能设备上捕获图像的代码,并且仅获取自上一个周期以来发生更改的数据。我们需要做一个通信解决方案,例如logmein.com(不支持WinCE5),在该解决方案中,智能设备连接到服务器,然后我们可以从该服务器将数据流式传输到支持人员的客户。基本上,智能设备会启动与我们服务器的连接,并在服务器请求时开始提供屏幕数据。支持客户端连接到服务器并获取可用流的列表,然后选择一个进行监听。
考虑到我们必须在智能设备上执行.NETCF 3.5中的解决方案,对此有何建议?除了简单的肥皂网络服务之外,我们的交流经验有限。
最佳答案
由于您要提出建议,因此我建议您这样做:
不要重新发明。重用您所能。您可以使用SSH进行隧道传输,因此可以通过智能设备上的GPRS建立SSH连接(例如,在回路内的PuTTY或plink端口);将远程端口转发到绑定到SSH服务器本地地址(127.0.0.1(sshd):4567 => localhost(smart_device_01):4567)的本地端口。您的客户端连接到SSH服务器并访问每个设备的分配端口。
话虽如此,这可能不是您要找的答案。下面-您可能正在寻找的答案。
根据我对LogMeIn的工作原理的分析,您将需要构建一个HTTPS或TLS服务器,智能设备将在其中推送数据。我们称它为隧道服务器。
您可能希望产生一个新线程,该线程反复尝试建立与隧道服务器的连接(根据您的指定要求,从智能设备到服务器的出站连接)。使用像BEEP / BXXP这样的协议,您可以封装和复用面向消息的会话或面向流的会话。将BXXP / BEEP包装为TLS,并通过隧道连接到您的隧道服务器。 BEEP使您可以将流多路复用到一个连接上-如果您想要内部LogMeIn解决方案的全部功能,则需要使用类似的东西。
建立连接后,进行新的BEEP会话。通过新的会话,告诉隧道服务器您的系统标识信息(设备名称,设备身份验证签名)。将心跳数据(定期添加时间戳)写入此新会话。
设置一个与BEEP控制会话连接的回调(或另一个线程)。留意请求服务的消息。当出现此类请求时,请生成所需的线程以从自定义远程显示协议复制数据,然后通过同一通道将该数据推回。
这为您的智能设备程序设置了基本前提。您可以根据需要添加功能,例如,匹配LMI的IT Reach订阅提供的功能(远程注册表,安全隧道Telnet,远程文件系统,远程打印,远程声音...您就可以了)
我将做一些假设,您知道如何正确保护所有这些内容以用于客户端的身份验证和授权(是否允许用户foo访问智能设备栏?)。
在隧道服务器上,启动用于多路分解连接和会话的服务器套接字(侦听入站连接,或者从智能设备的角度看,智能设备出站连接)。打开连接后,启动BEEP并注册回调/启动线程以等待身份验证/心跳会话。对智能设备执行AAA所需的检查-是否允许这些设备,已知这些设备,成本多少等,您的隧道服务器会代表智能设备转发数据。对于每个BEEP会话,在AAA过程成功后,将一个名称(设备名称)附加到BEEP会话;如果出现故障,请关闭连接并让AAA机制知道(阻止攻击者)。您的隧道服务器还应该设置与前端交互所需的内容-也就是说,它应该具有与BEEP交互的代码,以多路分解流以显示远程显示数据。
在前端服务器(可以与隧道服务器位于同一框)上,安装AAA例程-检查用户是否已知,是否允许用户,应向用户收费多少,等等。通过,从前端服务器到隧道服务器建立安全连接。获取隧道服务器知道允许用户访问的设备名称。此时,您应该能够从隧道服务器获得基于设备名称的“明文”流。将此流转发回用户(例如,通过TLS或再次通过TLS上的BEEP),或发送所需的配置,以使远程显示客户端使用所需的参数连接到隧道服务器,以访问远程显示协议的流。
关于compact-framework - 复制智能设备的logmein.com行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13398563/
随着我们的应用程序的增长,我们需要更多的 Windows CE 设备空间。 我们安装了 SD 卡。从 sd 卡运行我们的应用程序很慢,如果您从持久路径运行应用程序,则需求分页会出现一些严重的问题。 我
是否可以在数据网格单元格中显示图像? 我目前正在使用紧凑型框架 3.5。 有什么建议吗? 最佳答案 就像其他海报评论的那样,你需要自己动手。幸运的是,这并不太难。 在我的应用程序中,我需要一种在特定列
我读了这个问题:Command Line Parser for .NET . 我以为这就是我要找的,但图书馆 Command Line Parser Library不是 Compact 框架友好的..
我用过 CF Remote Performance Monitor ,但是这似乎只跟踪在托管世界中初始化的内存,而不是在非托管世界中。好吧,我只能假设这是因为探查器中列出的数字远低于允许的最大值(CE
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 8年前关闭。 Improve thi
当我将字符串绘制到缓冲区中时,结果输出并没有像我期望的那样抗锯齿。这段代码说明了这个问题……只需将它放在标准智能设备项目的 Form1.cs 中: protected override void On
一位 friend 正在做在线 Scala 类(class)并分享了此内容。 # Write a recursive function that counts how many different w
如何仅使用紧凑型框架获取 MAC 地址? 最佳答案 OpenNETCF 代码的 1.4 从以下 P/Invoke 调用中获取信息: [DllImport ("iphlpapi.dll", Se
System.Diagnostics命名空间(尤其是 GetFrame(int frameNumber))在 CF 中不可用。在 CE (6.0 R3) 上运行时如何获取调用堆栈详细信息? 谢谢! 最
使用 .net Compact Framework 编写的应用程序可以自行重启吗? 实现这一目标的一些常见模式是什么?我想要一个自我更新的应用程序,如果更新完成,它会自行重启。 当然,我可以有 2 个
在 Compact Framework 上, System.Windows.Forms.Timer 类不支持 system.componentmodel 构造函数: 支持新的 Timer():http
在我的 Windows CE 6.0 应用程序中,我正在与返回错误 header 信息的专有 Web 服务器设备通信(更具体地说,它没有返回任何 header 信息)。 我认为缺少 header 信息
我只通过使用 Compact Any Size Classes .. 它可以在各种类型的手机上完美运行。 但 XCode Storyboard更喜欢对所有 iphone 纵向模式使用紧凑的常规尺寸类。
我目前正在将我的 Compact Framework 2.0 应用程序迁移到新的 Windows Embedded 7 Compact 机器上,并且必须为 CF 3.5 重新编译它。它编译但根本不运行
我有以下要求: 我需要一个适用于 CE (x86) + .NET Compact Framework 的 API 来播放视频(类似于 CorePlayer API...只是免费)? 还有其他可用的吗?
我正在使用 VS2008 和 .NET Compact Framework 3.5 构建一个可执行文件,目标是 Windows Mobile 6 Professional,但是每当我编译项目时,我在
尝试在我的新 PC 上的 Visual Studio 中构建 .CAB 时出现以下错误。来源是相同的。旧 PC 上也不存在注册表警告。 Windows CE CAB Wizard Warning: S
我正在尝试使用 Bouncy Castle v1.7在 Windows Mobile 6.5 设备上。 我正在尝试执行以下代码: ISigner signer = SignerUtilities.Ge
当我使用取消按钮关闭程序时,我收到一个应用程序错误,它所做的只是关闭表单。 错误说: “应用程序 appName.exe 遇到严重错误,必须关闭” 我该如何开始修复它?它不是抛出的异常;没有提供其他信
我知道 compact() 是一个标准的 php 函数。而 set() 是一种特定于蛋糕的方法。 我正在运行一个简单的测试,将值传递给使用 ajax 生成的 View (我的 Controller 中
我是一名优秀的程序员,十分优秀!