將遠程控制應用於教學中已成為目前計算機化教學的重要手段一定有很多的網蟲想了解這種網絡教學方式的編程原理吧在此我們就以一個簡單的遠程控制程序作為示例說明這種網絡編程的基本原理本程序以Delphi編程為例
其實該程序的工作機制很簡單受控方運行一個程序用於偵聽端口並接收數據包而主控方通過端口給受控方的端口發送數據包根據這個原理我們編寫兩個程序一個是控制方的而另一個是受控方的把這兩個程序運行在兩台不同的機器上受控機等待控制機發送過來的數據然後執行相應的操作(如本例中的重啟)
Delphi中有兩類控件可以實現上面的目的一類是控制方使用ClientSocket受控方使用ServerSocket(均在Internet頁)另一類是雙方都使用NMUDP(在FastNet頁)我們知道網絡傳輸都是不可靠的也就是說傳輸的數據有可能丟失而這兩類控件的區別是前者使用TCP(Transfer Control Protocol傳輸控制協議)TCP協議是面向連接每次雙方建立連接(或斷開)時需經過三次握手較為耗時但數據傳輸可靠而後者使用UDP(User Datagram Protocol用戶報文協議)它是面向無連接的發出數據不需對方確認這樣速度比TCP快但數據有可能丟失因此它不可靠由於控制所需傳送的數據量不大而且需要較高的可靠性因此一般使用前者程序說明如下
第一步開始控制方程序在其中加入clientsocket控件取名control設置host屬性為受控機ip地址port屬性為(端口可以隨便設置但不要與一些默認端口重復如等)
第二步在FormCreate事件中加入代碼controlopen; //打開與受控機的通信
第三步加入個Button設置caption為重新啟動並在ButtonClick事件中加入代碼controlSocketSendText(reboot)//通知受控機重新啟動這樣就完成了控制方的工作了
第四步開始受控方的程序在其中加入serversocket控件取名undercontrol設置port屬性為(與控制方的端口一致)active屬性為true
第五步在undercontrol的OnclientRead事件中加入代碼if SocketReceiveText=reboot then
ExitWindowsEx(EWX_REBOOT); //重啟的API函數
這樣就完成了代碼的工作然後編譯這兩個程序生成兩個exe文件分別放在兩台機器上運行(記得先運行Win下的受控機程序)在控制機按下重新啟動的Button(按鈕)受控機就重新啟動了遠程控制機器重啟成功實現
由於篇幅的限制以上忽略了很多細節的東西(如出錯處理)而且只能完成遠程控制的一種功能有興趣者可在此基礎上完善可實現網絡軟件管理中的其它功能如鼠標鍵盤鎖定關機抓取屏幕文件操作視頻傳輸等在此就不多介紹了有興趣者可以上網多查看些這方面的資料
From:http://tw.wingwit.com/Article/program/Delphi/201311/25023.html