精品主页 | 软件下载 | 系统下载 | 精品导航| 精彩图片 | 转帖工具 | 版主申请 | 影视下载
发新话题
打印

用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上运行通过。最后要声明的是此程序由于能够控制对方的计算机,在实验时要事先经过他人同意,不要给别人造成影响。

TOP

发新话题