【讨论】.Net版本的远程桌面

BoC2008 2009-12-12 12:40:19
加精
我在用C#做一个远程桌面。实现中遇到很多问题。
目前已经具备雏形,可以远程看视频,实现鼠标键盘操作,支持32、24、16位图像。
只是广域网的性能(尤其是复杂桌面)和VNC、Remote差距很大。
开这个帖子希望交流一下,得到一些指点。

通信层:UDP协议,使用UDP为了方便穿透内网。VNC是TCP协议的,内网穿透要麻烦点。
1、UDP64K缓冲的限制,是否会不适于发送大量的数据。
2、网络层的优化SetOption的原理和具体的使用方式。
3、关于丢包,最高效的解决方案。
4、.Net下的异步模式和完成端口对通信效率有多大的提高,如何实现?

包层:每个数据包有统一的结构。包含ID,发送时间,优先级,命令字等等。
1、.Net没有提供高效的支持多线程的优先级队列?
我需要类似java的优先级阻塞队列。目前使用边界阻塞最小堆做了一个粗略的实现。

SFB层:这个层是模仿RFB协议做的。目前只做到增量传输。
1、字节流的压缩算法。比如RRE的压缩。
2、关于CopyRect是如何实现的,因为客户端是不知道哪些区域是可以Copy的,服务器端判断的算法?

图像层:这一层做图像的分割、合成,图像匹配等。
1、图像匹配算法,是否有高效的算法可以不比对每个像素,做到基本上判定两副图像匹配。
2、图像合成,直接用Bitmap粘贴肯定效率低下,这个已经用BitmapData修正。
3、图像显示,Invoke,.Net的invoke性能感觉很差。

抓屏:使用API抓屏时间为6Oms。

CPU的使用率:线程睡眠可以降低CPU使用率,但是影响实时性。如何平衡?

Remote、VNC对于复杂的远程桌面,如视频和游戏界面,为什么能达到比较理想的效果,而且CPU的使用率不高?

希望这个帖子能起到抛砖引玉的作用^_^。
...全文
6087 142 打赏 收藏 转发到动态 举报
写回复
用AI写文章
142 条回复
切换为时间正序
请发表友善的回复…
发表回复
liushengli1012 2011-12-24
  • 打赏
  • 举报
回复
高人啊。我弄那个带宽占用好高,广域网根本不能用。
神赐书宝 2011-11-30
  • 打赏
  • 举报
回复
提供了很不错的思路 有待理解
cxsky2008 2011-07-13
  • 打赏
  • 举报
回复
没了吗。结果呢
guanyelong 2011-06-15
  • 打赏
  • 举报
回复
希望LZ 能用代码体现 让我们参考啊 期待。。。
dododunk 2011-06-13
  • 打赏
  • 举报
回复
ms的不完全是传图像(尤其到win7,它的远程桌面都支持areo)
hd_wyb007 2010-12-30
  • 打赏
  • 举报
回复
DeathSteps 2010-12-28
  • 打赏
  • 举报
回复
关注!计算机网络学的不是特别好,看来对于网络通信方面还要加强啊!
zhaihj8828 2010-11-02
  • 打赏
  • 举报
回复

请问shine333,学习之中,请问“图片压缩用GIF压缩”什么意思,不一样的图片在传输之前压成.gif文件格式?还是。。。
a13237125026 2010-09-02
  • 打赏
  • 举报
回复
学习
dongjianhua520520 2010-06-12
  • 打赏
  • 举报
回复
牛贴留名
极速闪电 2009-12-17
  • 打赏
  • 举报
回复
学习一下. 不久后也要做这个功能的.
流比 2009-12-17
  • 打赏
  • 举报
回复
高手,目前正对这方面感兴趣,半年后来看
kehe888 2009-12-16
  • 打赏
  • 举报
回复
写的很好
ljsheng 2009-12-16
  • 打赏
  • 举报
回复
皮肤啊
dingwenzhao 2009-12-16
  • 打赏
  • 举报
回复
有源代码吗?
BoC2008 2009-12-15
  • 打赏
  • 举报
回复
[Quote=引用 118 楼 zjh333 的回复:]
换用VC++或Delphi,不要在NET上耗时间了
Net不适合作这个的


[/Quote]

VC来做性能会好一些,但是不至于NET就不能够做吧。
否则怎么对得起NET之名?!
yunchenggaowuwei 2009-12-15
  • 打赏
  • 举报
回复
kankan
zjh333 2009-12-15
  • 打赏
  • 举报
回复

换用VC++或Delphi,不要在NET上耗时间了
Net不适合作这个的

BoC2008 2009-12-15
  • 打赏
  • 举报
回复
[Quote=引用 115 楼 shine333 的回复:]
补充一下分区的好处:
1. 不用每次传送整个屏幕。
2. 比较差异更快(除了我讲的抽样比较,还可以用Hash或者使用异或的奇偶校验)
3. 在通常的桌面中,在较小的一个区域内,颜色值比较单一,有利于传输时的压缩

另外,还有一点,我使用16位色(R5G6B6)而不是24位色(R8G8B8):
1. 传输时每像素节省1个字节
2. 比较时,可以忽略肉眼比较难分辨的细微变化
[/Quote]

不谋而合。处理方式和你的很接近。16色的效果很不错。^_^
加载更多回复(122)

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧