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

用Delphi實現遠程控制

編輯:Delphi
  WinSock是一組API,用於在網絡上傳輸數據和交換信息。雖然現在有很多工具如FTP程序可以在網絡上傳輸數據和文件,但是通過WinSock編程有更大的靈活性,它不需要關心網絡連接的細節,然而用WinSock編程卻很復雜,但是在Delphi中我們並不需要直接與WinSock的API打交道,因為TClIEntSocket元件和TServerSocket元件(在Internet頁)封裝了WinSock的大部分API,使得對WinSock的訪問大大簡化。下面這個遠程控制的例子就很清楚地說明了這個問題,它可以發送一個消息給對方,並能夠使對方的電腦關閉、重新啟動或重新登錄。

  一、實現原理

  ---- 實行遠程控制,實際上就是一個服務器程序(以下簡稱被控程序)和一個客戶程序(以下簡稱主控程序):被控方即為服務器程序,它監聽客戶的請求,並作出處理;主控方即為客戶程序,它連接上服務器後,發出自己的請求,服務器便根據自已的請求進行不同的響應。

  二、編寫主控程序

  ---- 1、新建一個項目Client.dpr,並把一個TClIEntSocket元件放到Form上,它的屬性設置如下:Port設為100(端口號可任意設置,只要求雙方統一),其它屬性按默認值。在窗體上添加兩個TEdit:Edit1用來輸入發送的字符,Edit2用來輸入IP地址;添加兩個TButton:Button1點擊後用來連接被控機,Button2點擊後用來發送字符,然後聲明一個私有變量ConnectFlag,表示雙方是否連接好:

   private

   ConnectFlag:Boolean;

  

  ---- 2、ClIEntSocket1的OnConnect事件代碼如下:

   procedure TForm1.ClIEntSocket1Connect

  (Sender: TObject;Socket: TCustomWinSocket);

   begin

   ConnectFlag:=True; //表示連接成功

   end;

  

  ---- 3、ClIEntSocket1的OnError事件代碼如下:

  procedure TForm1.ClIEntSocket1Error(Sender: TObject;

  Socket: TCustomWinSocket; ErrorEvent:

  TErrorEvent;var ErrorCode: Integer);

   begin

  Application.MessageBox(PChar(' 不能連接到IP地址

   : ' + Edit2.Text+'。'+

  #13+'可能是監聽程序沒有運行或網絡故障!'),'

  連接錯誤',MB_OK+MB_ICONSTOP);

   ErrorCode := 0;

   end;  

  ---- 4、Button1的OnClick事件代碼如下:

  procedure TForm1.Button1Click(Sender: TObject);

  begin

  with ClIEntSocket1 do begin

  if Active then begin

  Active := False;//在連接之前首先關閉

  ConnectFlag:=False; //置連接標志為假

  end;

  if Length(Edit2.Text) > 0 then begin

  Host := Edit2.Text; //指定IP地址或主機名

  Active := True;

   end;

   end;

   end;

  ---- 5、Button2的OnClick事件代碼如下:

  procedure TForm1.Button2Click(Sender: TObject);

   begin

   if ConnectFlag then

  ClIEntSocket1.Socket.SendText(Edit1.Text)

   //如果連接成功則發送字符串

   else

  Application.MessageBox(PChar(' 沒有連接到地址 :

   ' + Edit2.Text+'。'+

  #13+'檢查IP地址是否存在或是否已經連接!'),'

  提示信息',MB_OK+MB_ICONSTOP);

   end;

  三、編寫被控程序

  ---- 1、新建一個項目Server.dpr,並把一個TServerSocket元件放到Form上,它的屬性設置如下:Active設為True;Port設為100,其它屬性按默認值。

  ---- 2、ServerSocket1的OnClIEntRead事件代碼如下:   

  procedure TForm1.ServerSocket1ClIEntRead

  (Sender: TObject;Socket: TCustomWinSocket);

   var

   Str:PChar;

   Code,V:Integer;

   begin

   Str:=PChar(Socket.ReceiveText); //接收字符串

  Val(Str,V,Code); //處理接收的字符串,首先轉換字符串為整數

   if Code< >0 then

  Application.MessageBox(Str,'提示信息',

  MB_OK+MB_ICONINFORMATION)

  //如果轉換後的數據不是一個整型數就通過消息框來顯示字符串

   else

   if (V=0)or(V=1)or(V=2) then

   ExitWindowsEx(V,0)

  //調用Windows的API函數(V=0表示重新登錄、

  V=1表示關機、V=2表示重啟動)

   else

  Application.MessageBox(Str,'提示信息',

  MB_OK+MB_ICONINFORMATION);

  //轉換後數據不為0、1、2時在消息框內顯示字符串

   end;  

  ---- 3、修改項目文件,不讓窗口顯示並且防止它運行兩次,修改begin和end之間的代碼如下:

   begin

  Application.Initialize;

  if FindWindow('TForm1','Form1')=0 then begin

  //當沒有找到Form1時執行下面代碼

  Application.ShowMainForm:=False; //不顯示主窗口

  Application.CreateForm(TForm1, Form1);

  Application.Run;

   end;

   end.  

  四、注意事項

  ---- 1、網絡要裝配正確並安裝TCP/IP協議,且要正常運行。

  ---- 2、首先要運行被控程序。   

  ---- 3、必須知道對方的IP地址或主機名。   

  ---- 上述程序用Delphi5.0編寫,在Windows98對等網、WindowsNT4.0局域網以及Internet上運行通過。最後要聲明的是此程序由於能夠控制對方的計算機,在實驗時要事先經過他人同意,不要給別人造成影響。

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