现在的位置: 首页 > 综合 > 正文

Delphi 远程控制(1)

2018年02月06日 ⁄ 综合 ⁄ 共 1416字 ⁄ 字号 评论关闭

1. Delphi 进行远程控制

  其实该程序的工作机制很简单,受控方运行一个程序,用于侦听端口并接收数据包,

        而主控方通过端口给受控方的端口发送数据包。

根据这个原理,我们编写两个程序,一个是控制方的,而另一个是受控方的,把这两个程序运行在两台不同的机器上,受控机等待控制机发送过来的数据然后执行相应的操作(如本例中的重启)。

  Delphi中有两类控件可以实现上面的目的。

一类是控制方使用ClientSocket,受控方使用ServerSocket(均在Internet页),

另一类是双方都使用NMUDP(在FastNet页)。

我们知道网络传输都是不可靠的,也就是说传输的数据有可能丢失,而这两类控件的区别是前者使用TCP(Transfer Control Protocol,传输控制协议)。

      TCP协议是面向连接,每次双方建立连接(或断开)时需经过三次握手,较为耗时,但数据传输可靠;

     而后者使用UDP(User Datagram Protocol,用户报文协议),它是面向无连接的,发出数据不需对方确认,这样速度比TCP快,但数据有可能丢失,因此它不可靠

由于控制所需传送的数据量不大,而且需要较高的可靠性,因此一般使用前者,程序说明如下:

  第一步,开始控制方程序,在其中加入clientsocket控件,取名control,设置host属性为受控机ip地址,port属性为1234(端口可以随便设置,但不要与一些默认端口重复,如80等)。

  第二步,在FormCreate事件中加入代码control.open; //打开与受控机的通信

  第三步,加入个Button,设置caption为“重新启动”,并在ButtonClick事件中加入代码control.Socket.SendText('reboot');//通知受控机重新启动。这样就完成了控制方的工作了。

  第四步,开始受控方的程序,在其中加入serversocket控件,取名undercontrol,设置port属性为1234(与控制方的端口一致),active属性为true;

  第五步,在undercontrol的OnclientRead事件中加入代码if Socket.ReceiveText='reboot' then

  ExitWindowsEx(EWX_REBOOT,2); //重启的API函数

 

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地址或主机名。

 

  这样就完成了代码的工作,然后编译这两个程序生成两个.exe文件分别放在两台机器上运行(记得先运行Win98下的受控机程序),在控制机按下“重新启动”的Button(按钮),受控机就重新启动了。远程控制机器重启成功实现。

 

抱歉!评论已关闭.