当前位置:首页 » 操作系统 » vnc源码研究

vnc源码研究

发布时间: 2022-03-01 18:48:38

㈠ 在哪可以下载远程监控的源代码

你去下载vnc源码包就可以了

㈡ VNC远程协助软件有时候会弹出错误代码5,拒绝访问是什么原因

此外系连接双方网络状态极差时候,你在控制对方的时候,如果操作过快,可能会造成对方网络人软件死掉,从而造成连接突然断掉,这时候死掉一方的网络人也有可能出现VNC的错误提示(这样概率比较少)。因为网络人远程控制功能的核心是建立在VNC 基础上的,当通讯发生异常时候,有可能出现VNC的错误,并造成程序当掉。

㈢ 求vnc源代码,发到我邮箱,谢谢,最好是用vc++可以编辑的文件,可以对其进行修改的,邮箱是zhouzhou199...

已经发了

㈣ 请问谁知道哪里有远程控制软件VNC的源码

vnc的源码安装与使用!!!

VNC的原码安装与使用

下载VNC Server与VNC viewer.
VNC Server下载地址:http://www.linuxeden.com/download/softdetail.php?softid=744
VNC viewer下载地址:http://download.pchome.net/php/dl.php?sid=2603

文章分为两部分:1〉被控端 Redhat A3 主控端Windows 2000

2〉被控端 Windows 2000 主控端Redhat A3

一、被控端 Redhat A3 主控端Windows 2000

1.安装vnc-3.3.7-x86_linux.tar.gz
t ar -zxvf vnc-3.3.7-x86_linux.tar.gz
cd vnc-3.3.7-x86_linux
./vncinstall /usr/bin /usr/local/share/man #前一个路径是vnc的执行文件路径(可更改) 后一个是vnc man的安装路径

安装winvnc.exe

2.在Linux上启动VNC Server
执行vncserver命令:
[root@linux root]# vncserver
You will require a password to access your desktops.
Password: ----为了不想任何人都可以任意遥控此计算机。因此当第
Verify: ---1次启动VNC server时,会要求设置网络遥控的密码。
New ‘X’ desktop is linux:1 ----一定要记住这一行稍后会用到。
Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/linux:1.log
(经上述步骤后,便已启动了VNC Server。如果你想要更改VNC Server的密码,只要执行vncpasswd命令即可。)
3.在Microsoft Windows上运行VNC Viewer
直接运行“vncviewer.exe”,系统会出现”Connection details”对话框。
在“Connection details”对话框中的“VNC server”文本框中输入VNC Server的IP地址(或主机名及显示装置编号,(请看3。在Linux上 启动VNC server的这一行,New ‘X’ desktop is linux:1 得到此信息),例如:192.168.0.1:1(冒号后面的1是执行VNC Server生成的 显示装置编号),
如图1
单击“OK”按钮后,VNC Server即会开始检查所输入的信息,若是信息错误,系统会出现“Failed to connect to server ”的错误信息:如图2

若是信息正确,则会接着出现“VNC Authentication”对话框。如图3

若是在“VNC Authentication”对话框中输入的密码正确,就可以成功地打开Linux的桌面窗口。如图4

4. 从浏览器远程遥控。
启动VNC Server 后直接打开浏览器,在地址栏中输入被控端的网址或IP地址,并在网址后加上“:5800+显示编号”的端口号即可操控该计 算机。
如图5
例如:http://192.168.01.:5801 (如果显示编号为1,一般第一次设置的显示编号都是1,就用5800+1=5801。)
如图6

如图7

5.vnc默认连接的TWM桌面,可以修改/root/.vnc/xstartup文件,更改连接的桌面。把最后一行 twm& 改成 gnome-session& or kde&

二、被控端 Windows 2000 主控端Redhat A3

1.在windows 2000 中运行vnc server ,起来之后右键点击vnc server的图标--〉properties 出现vnc server 的属性配置界面。
如图8

在password后输入自己的密码,并把Auto的勾去掉,并写一个显示装置编号,我的为1。点ok退出。

2.在LINUX中输入vncviewer,出现如图,输入vnc server 的ip+显示装置编号(192.168.0.2:1) 回车出现如图:
如图9

如图10
输入刚才在password后的密码,就会出现windows 2000的界面了!

㈤ 什么叫做VNC它有什么作用主要用途在哪个方面使用

是VNN所提供的客户端软件。这是款鼎鼎有名的远程管理工具,类似Win2000的终端服务,相对于其它管理工具,有自己不少的特点,1:客户端活动如掉线不会影响到服务端,再次连接就可以了;2:客户端无需安装,甚至用IE等浏览器就可控制服务端;3:最大的优点就是真正跨平台使用,你可以在WINDOWS下用客户端远程控制UNIX,反之亦然。默认端口是5800、5900,该版本是运行在x86 Win32 下的完整安装包,可自行选择安装服务端或客户端。你如果需要源代码以及其它系统Linux、Solaris 2.5、HP-UX 11 下的版本可自行访问作者主页下载。

㈥ fedora里面怎样运行realvnc源码

RealVNC Server提供两种运行模式,即Server模式和Virtual模式。Server模式是指主机启动进入图形模式后,无论登录与否,多个远端都可以通过VNC访问主机当前的X11图形环境,所有远端共享当前主机上的同一个图形管理器会话,主机上的图形环境下的操作或者某个远端对主机图形环境下的远程操作,包括主机在内以及所有远端都能同时看见。Virtual模式则有点类似于云桌面方式,即远端通过VNC远程连接到主机后,主机上的VNC Server开启一个幕后的图形环境会话专供这个远端远程控制使用,每个连接到主机的远端,都拥有一个各自独立的远程图形环境会话,互不干扰,主机自己的图形环境会话也是独立的,不受远端的干扰。

㈦ ultravnc 源码怎么样编译

下载源代码:UltraVNC
VS打开源码中的winvnc工程,会导入所有工程,删除如图所示的工程(对一般使用没有影响)
winvnc->右键->属性->配置属性->vc++目录,在包含目录和库目录中添加directX SDK的include和lib目录(解决:fatal error C1083: Cannot open include file: 'd3dx9.h': No

㈧ VNC 远程下发,批量更新用户机器上软件有源码更好

这个貌似么有 温馨提示:希望我的回答能够帮到您 如能解决请采纳 举手之劳不胜感激 如有疑惑可追问谢谢

㈨ 请问有谁知道VNC软件的源代码

vnc win-hook + event-simulate + gdi-bitmap-capture(delay send) + libjpeg + socket ******************************************************************************************************************* VNC的图像更新机制核心为,桌面区域更新记录策略和更新区域通知策略。 桌面更新区域记录主要是通过hooks记录桌面上变化的矩形区域, 只记录更新的矩形区不记录具体更新的数据。 更新区域记录步骤大致如下: 1.wm_hooks截获桌面变化的相关消息,并转化为自定义的消息发送给WMHooksThread线程处理。 2. WMHooksThread 中用SimpleUpdateTracker new_changes记录新的更新区域. 3.把SimpleUpdateTracker new_changes更新拷贝到SDisplay中。 4.每次要发送桌面更新的时候,把SDisplay中记录的更新区域传给VNCServerST 对象中。 更新区域的通知主要有poll和push两种机制。push是服务器每隔10ms检查有没有更新,如果有更新则主动把更新推送给客户端, poll机制则是客户端主动请求更新,客户端通过发送framebufferupdate请求某一个区域更新,服务器处理该消息发送相应的更新。
详细分析如下: 1.Wm_hooks截获消息并转化为自定义的消息发送给WMHooksThread线程处理。 Wm_hooks自定义的消息: UINT WM_HK_WindowChanged = RegisterWindowMessage(_T("RFB.WM_Hooks.WindowChanged")); UINT WM_HK_WindowClientAreaChanged = UINT WM_HK_WindowBorderChanged = RegisterWindowMessage(_T("RFB.WM_Hooks.WindowBorderChanged")); UINT WM_HK_RectangleChanged = RegisterWindowMessage(_T("RFB.WM_Hooks.RectangleChanged")); UINT WM_HK_CursorChanged = RegisterWindowMessage(_T("RFB.WM_Hooks.CursorChanged")); 钩子截获到消息以后,把它转化为自定义的消息,然后发送给WMHooksThread线程处理,消息转化如下: 边框更新消息:WM_NCPAINT,WM_NCACTIVATE 客户区域更新消息:BM_SETCHECK, BM_SETSTATE,EM_SETSEL,WM_CHAR,WM_ENABLE,WM_KEYUP,WM_LBUTTONUP,WM_MBUTTONUP,WM_PALETTECHANGED,WM_RBUTTONUP,WM_SYSCOLORCHANGE,WM_SETTEXT。 窗口改变消息:WM_HSCROLL,WM_VSCROLL,482,485。 矩形区更新消息:WM_DESTROY 窗口客户区消息:WM_PAINT 鼠标消息:WM_NCMOUSEMOVE,WM_MOUSEMOVE 2 . WMHooksThread 中用SimpleUpdateTracker new_changes记录新的更新区域 WMHooksThread::run() 函数中先判断出矩形区域改变的大小,然后调用NotifyHooksRegion(const Region& r)把改变的区域记录到SimpleUpdateTracker new_changes中。 NotifyHooksRegion(const Region& r) { Lock l(hook_mgr_lock); std::list<WMHooks*>::iterator i; for (i=hooks.begin(); i!=hooks.end(); i++) { (*i)->new_changes.add_changed(r); if (!(*i)->notified) { (*i)->notified = true; PostMessage((*i)->getHandle(), WM_USER, 0, 0); // 把消息通知到clipper见下面一个处理函数 } } } 3.把更新区域拷贝到SDisplay中 rfb::win32::WMHooks::processMessage(UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_USER: { Sleep(0); Lock l(hook_mgr_lock); notified = false; new_changes.get_update(*clipper); //把更新通知到clipper中 new_changes.clear(); } break; } return MsgWindow::processMessage(msg, wParam, lParam); } Cliper在下面设置 rfb::win32::WMHooks::setUpdateTracker(UpdateTracker* ut) { if (clipper) delete clipper; clipper = new ClippedUpdateTracker(*ut); clipper->set_clip_region(clip_region); return AddHook(this); } UpdateTracker* ut 为void SDisplay::start(VNCServer*vs)中设置 core->using_hooks = core->wm_hooks.setUpdateTracker(this); 4.把SDisplay中记录的数据传给VNCServerST 对象 在 SDisplay::processEvent(HANDLE event) { try_update = flushChangeTracker() || try_update; //把变化的区域拷贝到VNCServerST中 if (try_update) server->tryUpdate(); //把更新发送给服务器 } flushChangeTracker()实现如下: bool SDisplay::flushChangeTracker() { if (change_tracker.is_empty()) return false; change_tracker.translate(screenRect.tl.negate()); change_tracker.get_update(*server); //server 实际指向VNCServerST 对象该函数把SDisplay中的更新拷贝到VNCServerST中。 change_tracker.clear(); return true; } 两种数据更新方式:Push机制和Pull机制 Push: SdisplayCore 中IntervalTimer cursorTimer定时器,每隔10ms尝试着检查一下是否有更新,如果有更新就发送更新给客户端
第一步: LRESULT SDisplayCore::processMessage(UINT msg, WPARAM wParam, LPARAM lParam) { case TIMER_CURSOR: display->triggerUpdate(); //SDisplay* display; } 第二步: void SDisplay::triggerUpdate() { if (core) SetEvent(updateEvent); //使事件对象为受信状态 } 第三步: SDisplay::processEvent(HANDLE event) { if (event == updateEvent) { if (try_update) server->tryUpdate(); // VNCServer* server指针 指向子类VNCServerST } } 第四步:向每一个连接的客户端发送更新 void VNCServerST::tryUpdate() { std::list<VNCSConnectionST*>::iterator ci, ci_next; for (ci = clients.begin(); ci != clients.end(); ci = ci_next) { ci_next = ci; ci_next++; (*ci)->writeFramebufferUpdateOrClose(); } }
第五步: void VNCSConnectionST::writeFramebufferUpdateOrClose() { try { writeFramebufferUpdate(); } catch(rdr::Exception &e) { close(e.str()); } } 第六步:SimpleUpdateTracker updates对象记录更新的区域,如果屏幕有更新则发送更新 void VNCSConnectionST::writeFramebufferUpdate(){ if (!update.is_empty() || writer()->needFakeUpdate() || drawRenderedCursor) { int nRects = update.numRects() + (drawRenderedCursor ? 1 : 0); writer()->writeFramebufferUpdateStart(nRects); Region updatedRegion; writer()->writeRects(update, &image_getter, &updatedRegion); // SmsgWriter * updates.subtract(updatedRegion); if (drawRenderedCursor) writeRenderedCursorRect(); writer()->writeFramebufferUpdateEnd(); requested.clear(); }
} 第七步:利用RFB协议发送更新 void SMsgWriterV3::writeFramebufferUpdateStart(int nRects) { startMsg(msgTypeFramebufferUpdate); os->pad(1); if (wsccb) nRects++; if (needSetDesktopSize) nRects++; os->writeU16(nRects); nRectsInUpdate = 0; nRectsInHeader = nRects; if (wsccb) { wsccb->writeSetCursorCallback(); wsccb = 0; } } Poll机制:客户端通过发送更新请求,请求更新某一个区域。 第一步:读取到一个更新某一个区域的请求 void SMsgReaderV3::readMsg() { case : readFramebufferUpdateRequest(); break; } 第二步:调用网络事件处理对象handler处理事件 void SMsgReader::readFramebufferUpdateRequest() { bool inc = is->readU8(); int x = is->readU16(); int y = is->readU16(); int w = is->readU16(); int h = is->readU16(); endMsg(); handler->framebufferUpdateRequest(Rect(x, y, x+w, y+h), inc);//handler 为 SMsgHandler* handler指针 是指向VNCSConnectionST对象 } 第三步: void VNCSConnectionST::framebufferUpdateRequest(const Rect& r,bool incremental) { if (!(accessRights & AccessView)) return; SConnection::framebufferUpdateRequest(r, incremental); Region reqRgn(r); requested.assign_union(reqRgn); if (!incremental) { updates.add_changed(reqRgn); server->comparer->add_changed(reqRgn); } writeFramebufferUpdate(); } 第四步:SimpleUpdateTracker updates对象记录更新的区域,如果屏幕有更新则发送更新 void VNCSConnectionST::writeFramebufferUpdate(){ if (!update.is_empty() || writer()->needFakeUpdate() || drawRenderedCursor) { int nRects = update.numRects() + (drawRenderedCursor ? 1 : 0); writer()->writeFramebufferUpdateStart(nRects); Region updatedRegion; writer()->writeRects(update, &image_getter, &updatedRegion); // SmsgWriter * updates.subtract(updatedRegion); if (drawRenderedCursor) writeRenderedCursorRect(); writer()->writeFramebufferUpdateEnd(); requested.clear(); } } 第五步:利用RFB协议发送更新 void SMsgWriterV3::writeFramebufferUpdateStart(int nRects) { startMsg(msgTypeFramebufferUpdate); os->pad(1); if (wsccb) nRects++; if (needSetDesktopSize) nRects++; os->writeU16(nRects); nRectsInUpdate = 0; nRectsInHeader = nRects; if (wsccb) { wsccb->writeSetCursorCallback(); wsccb = 0; } }
你看一下吧 我也是给你找的!

㈩ 求tightvnc java源代码包

兄弟, sourceforge.net被电信封了,谁都下不下来

热点内容
什么是java锁 发布:2024-09-23 02:22:29 浏览:381
手游服务器搭建教程失败 发布:2024-09-23 02:00:21 浏览:686
短暂的访问 发布:2024-09-23 01:29:08 浏览:828
安卓手机怎么设置4位数 发布:2024-09-23 01:24:58 浏览:548
5g和算法 发布:2024-09-23 01:20:40 浏览:507
pandas开发程序编译 发布:2024-09-23 01:13:58 浏览:466
android应用被系统回收 发布:2024-09-23 01:10:36 浏览:447
c语言餐厅管理系统 发布:2024-09-23 01:01:35 浏览:95
linux系统新加网卡怎么配置 发布:2024-09-23 01:01:34 浏览:895
java自我介绍一分钟 发布:2024-09-23 00:51:34 浏览:674