vnc源碼研究
㈠ 在哪可以下載遠程監控的源代碼
你去下載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被電信封了,誰都下不下來