概述
隨著計算機
網路通信技術的迅猛發展, 網路的套用越來越廣泛, 計算機不僅可以控制本地的設備, 還可通過網路控制遠端的設備,
計算機網路控制技術離不開網路編程。 相比眾多編寫網路通信軟體的工具和方法,使用Winsock控制項進行網路
編程簡單而且有效, 因而用處頗為廣泛, 成為一種主要技術。 Winsock控制項支持
UDP和
TCP兩種協定,可以方便地實現了
服務端和
客戶端的連線,在利用Winsock控制項進行開發時,
程式設計師並不用過多了解協定的內容,及網路間的關係和理論,也不需要調用低級的Socket通用程式接口,只需要使用Winsock, 由W insock尋找並利用已經安裝好的底層協定,正確設定控制項的屬性、方法、 事件,就可開發出相關程式。實現計算機之間的雙向
數據交換。 本文主要介紹基於
TCP/IP協定的Windows環境下使用Vb語言進行W insock網路編程的原理和方法,實現C/S模式的一種網路通信。這裡介紹了如何實現通過網路控制遠程計算機關機。
設計思想
本系統基於
C/S體系結構設計, C/S模式是一種傳統的開發模式,適用於用戶有限的
區域網路環境。 在這種模式下,客戶端與伺服器直接相連, 因此回響速度快。開發費用較低,周期也較短。 伺服器端(控制端)運行Server程式,在每台客戶端(被控端)上也需要運行專門的Client程式。 通過修改註冊表信息, 將Client的執行檔加到HKEY -LOCAL-MACHINE\SOFTW ARE\Microsoft\W indows\CurrentVersion\Run下,使Client程式在每次開機時能夠自動運行, 運行後兩端程式可以通過
IP位址建立連線,進行數據傳遞, 以達到通信的目的。 遠程關機功能模組連線在Client中, Server根據需要向Client傳送不同的命令(字元串), Client根據接受到的命令調用不同的功能模組,執行相應的功能, 實現管理機對被管理機的遠程控制。在WindowsNT/2000系統中,必需先調用API函式,獲取關閉
計算機的許可權, 然後才能關閉計算機。 可以將這個過程寫入客戶端程式中, 在執行關機命令之前先執行此步驟以獲取
許可權。 所以具體的遠程關機的步驟是: 第一步利用winsock控制項取得通信連線; 第二步為當前進程獲取關機許可權; 第三步根據伺服器傳送的命令, 客戶機調用ExitW indowsEx函式實現關機、 註銷、重啟。
系統實現
winsock連線
Winsock在計算機中提供了一個通信連線埠, 通過這個連線埠, 一台
計算機可以和網路中任何具有Winsock連線埠的
計算機通信, 利用Winsock控制項可以與遠程計算機建立連線, 並通過用戶數據
文報協定(UDP)或者傳輸控制協定(TCP)進行數據交換。這兩種協定都可以用來創建客戶與伺服器應用程式。本系統採用了後者, 通信過程為:
伺服器端:
1)設定服務端的監聽連線埠LocalPort屬性, 調用Listen方法進行監聽, 進行等待狀態後, 方能接收客戶請求。
2)當客戶端發同請求連線時(Connect), 伺服器端產生ConnectionRequest事件, 要回響連線, 就要調用Accept方法接受客戶端的requestID請求, 此後服務端和客戶端的連線開始建立。
客戶端:
1)設定客戶端的RemoteHost和RemotePort屬性,分別與伺服器的
IP位址, 監聽連線埠為同一個值。 然後調用Connect方法向伺服器提交連線請求。
2)服務端和客戶端連線上後, 就可以相互用SendData方法傳送數據和GetData方法接收數據了。 當接收數據到達時,發生DataArrival事件, 可根據DataArrival事件判斷調用的事件。 當伺服器或客戶端請求關閉連線時,調用Close方法即可。
調用API函式獲取關機許可權進行關機
關閉Windows所調用的
API函式是ExitWindowsEx,而WindowsNT/2000基於安全性的考慮, 必須先以API函式AdjustTokenPrivileges設定安全級別, 才能關機。在Windows2000/NT下面, 各種與系統有關的操作, 比如: 關閉系統, 添加設備或者修改系統時間等,必須要具有一定的許可權才能進行。 系統為每一個登錄的用戶設定了各種許可權, 這些許可權放到“訪問令牌(access token)” 中。如果要在程式中進行
授權的操作, 必須要將
訪問令牌中的這些操作設為可行的才能使用。 我們要修改一個
進程的訪問令牌, 先調用GetCurrentProcess函式取得當前進程訪問令牌的句柄,然後調用OpenProcessToken函式打開當前進程的訪問令牌, 接著調用LookupPrivilegeValue函式取得你想提升的許可權的值, 最後調用AdjustTokenPrivileges函式給當前進程的訪問令牌增加許可權就可以了。
過程調用方法
在編程中, 在Client的DataArrival事件中完成過程調用,
PrivateSubClientDataArrival(ByVal bytesTo2talAsLong) Dim i As st ring Client.GetData I/‘接收管理機傳送的命令字元串 selectcasei case/‘關機’ AdjustTokenPrivilegesForNT ExitW indowsEx EW X _SHUTDOW N,0/‘如果為“關機” 則調用遠程關機過程 case/‘重啟’ AdjustTokenPrivilegesForNT ExitW indowsEx EW X _REBOOT, 0/‘如果為“重啟”則調用遠程重啟過程case‘註銷’AdjustTokenPrivilegesForNTExitW indowsEx EW X _ LOGOFF,0/‘如果為“註銷”則調用遠程註銷過程End selectEnd Sub
通過Server程式可分別設定關機, 重啟,
註銷三個按鈕, 單擊按鈕時分別向Client傳送“關機”,“重啟”,“註銷” 字元串, 這時Client根據接收到的不同字元串可選擇執行不同的操作以完成相應的任務。
上述VB代碼在Win2000/W in98下調試通過, 並經過實際運行效果良好, 在VB環境下利用Winsock控制項進行網路編程, 開發一種基於
TCP協定的伺服器和客戶機
應用程式, 能夠實現伺服器端與客戶端之間進行數據通訊, 以實現一個簡單的遠程關機程式, 經擴展可以實現對多台客戶機進行控制,初步證實了用Visual Basic對遠程控制系統的可設計性和可實現性,對網路
遠程控制的基本實現方式作了嘗試性的探討, 以上示例採用的方法思路相對簡單, 在此基礎上略加改造, 可以形成功能複雜的計算機網路管理系統, 用於螢幕圖像抓取、 檔案傳輸、 遠程監控等。 在網路化時代, 對
區域網路內部的計算機管理作用重大, 通過遠程控制可以有效提高工作效率, 大量節約工作時間。