灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:4219回复:0

Delphi实现远程控制

楼主#
更多 发布于:2011-08-15 10:36
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地址或主机名。

喜欢0 评分0
游客

返回顶部