程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 遠程控制編程揭密

遠程控制編程揭密

編輯:Delphi
將遠程控制應用於教學中,已成為目前計算機化教學的重要手段。一定有很多的網蟲想了解這種網絡教學方式的編程原理吧。在此我們就以一個簡單的遠程控制程序作為示例,說明這種網絡編程的基本原理。本程序以Delphi編程為例。

  其實該程序的工作機制很簡單,受控方運行一個程序,用於偵聽端口並接收數據包,而主控方通過端口給受控方的端口發送數據包。根據這個原理,我們編寫兩個程序,一個是控制方的,而另一個是受控方的,把這兩個程序運行在兩台不同的機器上,受控機等待控制機發送過來的數據然後執行相應的操作(如本例中的重啟)。

  Delphi中有兩類控件可以實現上面的目的。一類是控制方使用ClIEntSocket,受控方使用ServerSocket(均在Internet頁),另一類是雙方都使用NMUDP(在FastNet頁)。我們知道網絡傳輸都是不可靠的,也就是說傳輸的數據有可能丟失,而這兩類控件的區別是前者使用TCP(Transfer Control Protocol,傳輸控制協議)。TCP協議是面向連接,每次雙方建立連接(或斷開)時需經過三次握手,較為耗時,但數據傳輸可靠;而後者使用UDP(User Datagram Protocol,用戶報文協議),它是面向無連接的,發出數據不需對方確認,這樣速度比TCP快,但數據有可能丟失,因此它不可靠。由於控制所需傳送的數據量不大,而且需要較高的可靠性,因此一般使用前者,程序說明如下:

  第一步,開始控制方程序,在其中加入clIEntsocket控件,取名control,設置host屬性為受控機ip地址,port屬性為1234(端口可以隨便設置,但不要與一些默認端口重復,如80等)。

  第二步,在FormCreate事件中加入代碼control.open; //打開與受控機的通信

  第三步,加入個Button,設置caption為“重新啟動”,並在ButtonClick事件中加入代碼control.Socket.SendText('reboot');//通知受控機重新啟動。這樣就完成了控制方的工作了。

  第四步,開始受控方的程序,在其中加入serversocket控件,取名undercontrol,設置port屬性為1234(與控制方的端口一致),active屬性為true;

  第五步,在undercontrol的OnclIEntRead事件中加入代碼if Socket.ReceiveText='reboot' then

  ExitWindowsEx(EWX_REBOOT,2); //重啟的API函數

  這樣就完成了代碼的工作,然後編譯這兩個程序生成兩個.exe文件分別放在兩台機器上運行(記得先運行Win98下的受控機程序),在控制機按下“重新啟動”的Button(按鈕),受控機就重新啟動了。遠程控制機器重啟成功實現。

  由於篇幅的限制,以上忽略了很多細節的東西(如出錯處理),而且只能完成遠程控制的一種功能,有興趣者可在此基礎上完善,可實現網絡軟件管理中的其它功能,如鼠標、鍵盤鎖定、關機、抓取屏幕、文件操作、視頻傳輸等,在此就不多介紹了,有興趣者可以上網多查看些這方面的資料。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved