最近在做一个网络远程监控的程序。实现的功能和Pcanywhere差不多,可是在服务器端的资源占用率太高。
我的做法:在服务器端截图,压缩,发送到客户端,客户端在工作区显示截图,并且把所有在工作区的操作(键盘鼠标事件)都发送到服务器端,服务器程序把这些消息传给系统。
改进:1 改进响应速度(现在的响应速度为100ms),2 减少CPU的占有率。
是否有人做过这个方面的程序,希望不吝赐教。

解决方案 »

  1.   

    两个难点:获取屏幕图象要快. gdi 是很慢的. 另想办法.
    传输要快. 不管是压缩也好,分块也好,缩放图象也好.总之传输要快. 
    响应
      

  2.   

    100ms好像很快了,肉眼都看不出来,你怎么测出来的呀?
    如果你是GDI抓图的话,CPU占用率高,可能是做了色深转换。
    最好启动的时候修改成你抓图需要的色深。
    最好的性价比是抓16bit的图像,我的眼睛还没看出过16bit和24/32bit的区别。
      

  3.   

    我所知的更快的着手点有这么几个:1. directdraw
    2. 参考microsoft 终端服务,看它调用了什么api,或许有些隐藏的东西我们不知道.
    3. 也许驱动程序是个办法. 但绝对是不得已为之的办法.
      

  4.   

    WinVNC
    有源代码的!
    www.google.com
    一搜就有!
      

  5.   

    WinVNC用的是GDI,抓变化部分。
    我试过用它放电影的效果不好,不过比PCAnywhere好多了。
    另外他可以选择几种编码格式。
    有个好处它是跨平台的。
      

  6.   

    directdraw在抓图方面感觉和GDI性能差不多,它的长处在显示
      

  7.   

    正在研究WinVNC...
    找到一个好软件Remote Administrator,此软件号称载局域网中可以达到100-500帧!(在我的10M局域网中几乎感觉不到延时)
    它使用的是一种叫视频钩子的技术(Video Hook Driver Technology),大家猜一猜它是怎么做的?
      

  8.   

    GZ不过最大的问题是想知道如何解决抓图后的传输问题,而且不影响CPU的速度。
      

  9.   

    驱动器是可以解决的. 可参考DDK相关文档. 但实现起来没有这么容易.
      

  10.   

    to hello5()
    这个程序是公司的,恐怕不太好给你。不过你可以到google上搜一下winvnc(谢谢 taianmonkey ^o^),这个开放源码的软件可比我做得好多了。发现winvnc还是有一些问题(在win32下),如有时候屏幕刷新不及时(特别是一些帮助文档 .hlp文件 按滚动条的时候客户端显示不对),希望大家能给出解决办法。谢谢了。
      

  11.   

    PCAnywhere的client端看到的server端的图像,一定是通过server端截图,压缩,发送到client端这种方法实现的吗?
      

  12.   

    做远程控制肯定要截图(不然别人怎么看到你的屏幕? ^o^)
    但是有两个很关键的问题:
    1什么时候截图,2截哪一块图?
        并不是所有时候都需要传输图像,只在服务器端屏幕有改变时需要截图传输,也不是整个屏幕都需要传输,只有屏幕发生变化的区域需要传输。
        问题是windows的显示过程不是很清楚(起码小弟不知,望高手赐教),所以我们不能很精确的知道上面两个问题。    pcanywhere用到的应该是windows的钩子,做个小实验,在你的pcanywhere的服务器端打开windows的时钟,注意它的秒钟,它没有动!虽然下面的数字在走,但是它的秒钟没有动,说明了pcanywhere并没有整个屏幕截图传输,只传输了它认为发生了改变的部分(可惜这回它错了)。
      

  13.   

    to shootingstars(流星)
    我的意思是说,能不能通过从server端向client传server端屏幕上的信息,不传图,让client根据收到的信息自己生成图片!
      

  14.   

    请问codelover(蜡笔小钦) 学历?
      

  15.   

    to shootingstars(流星)
    你做的这个远程控制是用mfc,还是底层的winsock
    能不能说一下都用了些什麽?
      

  16.   

    to  leafzhou78()
    我想不传送图片是不太可能的,不知我是否理解了你的意思:你是否想只在两机之间传送windows的消息,然后让客户端自己生成窗口。
    比如说我可以截获服务器的消息是打开了一个浏览器,我可以让我的客户端也打开一个浏览器,可是里面的内容呢。如果我需要改变浏览器让它显示和服务器一样的内容,这个这个好像很难哦。我的程序使用win api,winsock写的。
    截图用的gdi函数,用direct好像性能提高并不明显。
      

  17.   

    up先,关于WinVNC,我也正在研究
      

  18.   

    to shootingstars(流星) 
    我就是这个意思,我也感觉很难!还是对windows底层的东西不太清楚.
    socket用的是阻塞模式还是非阻塞模式?开了多少线程?有没有用从属进程?
    能不能说的详细一点,很想了解一下设计的想法!
    现在server端的CPU的占有率高,只是由于截图造成的吗?
      

  19.   

    视频钩子源代码哪里有?关注很久了。
    NetMeeting和终端服务都是用的这个
    有源代码的给一份: [email protected]
    3x