[原创]从VB看DP实现远程控制的原理
以前在网上搜索关于远程控制编程的时候,大多都是基于VB来实现的,其他语言实现的比较少,我们知道在vb中实现通信编程是很容易的,这 归功于VB为广大程序员提供了一个网络编程接口winsock,它封装了所有繁琐的技术细节,并提供了访问tcp和udp网络服务的方便途径,只需要通过设置控件的属性并调用其方法就可以轻易连接到一台远程计算机中,并且可以还可以实现双向交换数据。 现在我们来看看什么是TCP和UDP协议?
TCP UDP是TCP/UDP协力中的两个传输层协议,它们使用IP路由器功能吧数据包发送到目的地。从而为应用程序提供网络服务,TCP:传输控制协议,提供的是面向连接的,可靠的数据流传输,所谓的“面向连接”就是再正式通信钱必须要与对方确立器可靠的连接,一个TCP连接必须要经过三次“对话”才能建立起来,其中过程非常复杂(有兴趣的朋友可以参考下:网络连接中关于三次对话三握手的一些文章).UDP:用户数据报协议,是与TCP想对应的协议,是面向非连接,其中“面向非连接”就是再正式通行前不必与对方先建立连接确定,不考虑对方的状态,直接发送数据。再通信编程中很少使用UDP原因就在于其面向非连接数据流传不可靠,很多情况都用TCP或两个一起使用
我们知道了TCP和UDP协议要实现通信编程,我们知道必须知道服务计算机名或IP地址,及服务器进行侦听的端口,在VB中通过设置属性值实现最后调用connect方法, 侦听端口用 listen方法,接发数据用senddata 和getdata来实现,基本的编程实现再vb中就很容易了
从vb实现通行编程实现原理我们已经知道了DP的远程控制编程的原理,再DP中实现远程控制编程也需要使用到API中的WINSOCK,用于再网络上传输数据和交换信息,使用winsock编程灵活性大不同于ftp程序编写,在dp中我们不需要直接和WINSOCK打交道,直接用TClientSocket元件和TServerSocket元件就可以是了,它封装了winsock大部分api
现在我们可以进行dp实现远程控制编程了,原理再VB中我们已经基本了解了 现在我们开始代码的实现:
******************************************代码网络提供*****************************************************
编写主控程序
---- 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.
---------------------------------------------------------------------------------------------------------------------------------------
结束:
一个用DP实现的远程控制原理和代码,很简单,其中的难点是如何正确的了解winsock ,所以在学习网络通行编程中应该深入的学习winsock,其灵活性很大,可以根据你的需要写出功能强大的远程控制软件
有兴趣的朋友可以参考相关文章