基于工作需要,最近开发一个远程控制桌面项目。

基本对象:被控制端,控制端,中转服务器结构。

被控制端称为Server提供桌面图像,接受他人远程输入控制。

控制端主要根据被控制端ID发起控制,可远程控制桌面进行常规操作(鼠标,键盘,文件等)。

中转报务器 主要提供每台被控制端的唯一ID(可根据被控制端的硬件标识给出ID),为被控制端和控制端之间通信建立桥梁,根据ID提供给控制端相应的IP和端口,以及登录验证服务。

由于目前大多数的被控制桌面处于路由器之下,没有公网IP,对外只有路由器公网IP。通信准备采用TCP/IP协议。

在通信协议上,可以让被控制端作为SERVER端,也可以作为Clent端。作为Server端需要对外公开IP和端口,主动监听,利用NAT穿透技术,让其可以被其它计算机访问。作为Client端,可以直接访问控制端的IP,要求控制端有公网IP和端口可以使用。

二者各有优点,作为Client端处于路由器之下,不用处理NAT穿透问题,只要能连网就可以被访问,缺点是需要一直主动尝试去连接服务器,不能按需发送联接,有点肉机的感觉。作为SERVER开放端口,需要处理NAT穿透。但是可以按需要被连接,缺点就是需要公开端口,容易被攻击的可能性。

程序设计上,采用C#语言开发,部分调用native api 实现功能,结构上尽量作到数据和界面分隔,事件驱动的模式。

远程控制实现方式,从远程桌面截图,并压缩后发往控制端,序列化之后,以字节流方式实现画面传输。键盘,鼠标控制,采用windows api 模拟实现。文件传输,以剪贴板复制\粘贴实现(如果技术上问题,就直接采用开发上传下载功能)。

可能遇到难点:

1、NAT穿透的具体实现方式

2、在锁定情况下,屏幕的控制

3、利用Windows 服务达到程序自动启动,相关开发没有经验

4、剪贴板实现文件传输,达到剪贴板共享的实现方式

5、图像传输的效率问题

posted on 2018-12-04 09:37  eristjy  阅读(633)  评论(0编辑  收藏  举报