Delphi中遠程控制的實現(一)

實行遠程控制,實際上就是一個服務器程序(以下簡稱被控程序)和一個客戶程序(以下簡稱主控程序):被控方即爲服務器程序,它監聽客戶的請求,並作出相應的處理;主控方即爲客戶程序,它連接上服務器後,發出自己的請求,服務器便根據自已的請求進行不同的響應。而WinSock是一組API,用於在網絡上傳輸數據和交換信息。通過WinSock編程有更大的靈活性,因爲它不需要關心網絡連接的細節,然而用WinSock編程卻很複雜。但是,在Delphi中我們並不需要直接與WinSock的API打交道,因爲TClientSocket元件和TServerSocket元件(在Internet頁)封裝了WinSock的大部分API,使得對WinSock的訪問大大簡化。下面這個簡單的遠程控制的例子就很清楚地說明了這個問題,它可以發送一個消息給對方,對方收到後發出信息確認。當然,在實際的編程中,我們可以根據需要,要求被控方可以根據主控方發來的信息,經過判斷後作出相應的動作。如關機、傳送文件…
一、主控程序(Client端):

ClientSocket1的Port設爲:2058。當然,可以改變,但要求主控程序和被控程序的Port值一致。界面如下:


源程序如下:

unit main;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ExtCtrls, ScktComp;

type

TMainForm = class(TForm)

Panel1: TPanel;

Panel2: TPanel;

Panel3: TPanel;

Memo1: TMemo;

Edit1: TEdit;

Button1: TButton;

Button2: TButton;

ClientSocket1: TClientSocket;

Edit2: TEdit;

procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

private


procedure Send_Message;//發送信息

{ Private declarations }

public

{ Public declarations }

end;

var

MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.Send_Message;

begin

ClientSocket1.Socket.SendText(Edit1.Text);//發送信息

Edit1.text:='';

end;

procedure TMainForm.ClientSocket1Read(Sender: TObject;

Socket: TCustomWinSocket);

var

s:string;

begin

s:=ClientSocket1.Socket.ReceiveText;//接收信息

Memo1.Lines.Add('服務器端返回的信息爲:'+s);

end;

procedure TMainForm.Button2Click(Sender: TObject);

begin

if Button2.Caption='登錄' then

begin

Button2.Caption:='斷開';

ClientSocket1.Address:=Edit2.Text;

ClientSocket1.Active:=False;

ClientSocket1.Active:=True;

Button1.Enabled:=True;

Edit1.Enabled:=True;

end else

begin

Button2.Caption:='登錄';

ClientSocket1.Active:=False;

Button1.Enabled:=False;

Edit1.Enabled:=False;

end;

end;

procedure TMainForm.Button1Click(Sender: TObject);

begin

Send_Message;

end;

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);

begin

if ClientSocket1.Active then

ClientSocket1.Active:=False;

end;

procedure TMainForm.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if key=#13 then

begin

key:=#0;

Send_Message;

end;

end;

end.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章