WinSock是一组API用于在网络上传输数据和交换信息虽然现在有很多工具如FTP程序可以在网络上传输数据和文件但是通过WinSock编程有更大的灵活性它不需要关心网络连接的细节然而用WinSock编程却很复杂但是在Delphi中我们并不需要直接与WinSock的API打交道因为TClientSocket元件和TServerSocket元件(Internet页)封装了WinSock的大部分API使得对WinSock的访问大大简化下面这个远程控制的例子就很清楚地说明了这个问题它可以发送一个消息给对方并能够使对方的电脑关闭重新启动或重新登录
一实现原理
实行远程控制实际上就是一个服务器程序(以下简称被控程序)和一个客户程序(以下简称主控程序)被控方即为服务器程序它监听客户的请求并作出处理主控方即为客户程序它连接上服务器后发出自己的请求服务器便根据自已的请求进行不同的响应
二编写主控程序
新建一个项目Clientdpr并把一个TClientSocket元件放到Form上它的属性设置如下Port设为(端口号可任意设置只要求双方统一)其它属性按默认值在窗体上添加两个TEditEdit用来输入发送的字符Edit用来输入IP地址添加两个TButtonButton点击后用来连接被控机Button点击后用来发送字符然后声明一个私有变量ConnectFlag表示双方是否连接好
private
ConnectFlag:Boolean;
ClientSocket的OnConnect事件代码如下
procedure TFormClientSocketConnect
(Sender: TObject;Socket: TCustomWinSocket);
begin
ConnectFlag:=True; //表示连接成功
end;
ClientSocket的OnError事件代码如下
procedure TFormClientSocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent:
TErrorEvent;var ErrorCode: Integer);
begin
ApplicationMessageBox(PChar( 不能连接到IP地址
: + EditText++
#+可能是监听程序没有运行或网络故障!)
连接错误MB_OK+MB_ICONSTOP);
ErrorCode := ;
end;
Button的OnClick事件代码如下
procedure TFormButtonClick(Sender: TObject);
begin
with ClientSocket do begin
if Active then begin
Active := False;//在连接之前首先关闭
ConnectFlag:=False; //置连接标志为假
end;
if Length(EditText) > then begin
Host := EditText; //指定IP地址或主机名
Active := True;
end;
end;
end;
Button的OnClick事件代码如下
procedure TFormButtonClick(Sender: TObject);
begin
if ConnectFlag then
ClientSocketSocketSendText(EditText)
//如果连接成功则发送字符串
else
ApplicationMessageBox(PChar( 没有连接到地址 :
+ EditText++
#+检查IP地址是否存在或是否已经连接!)
提示信息MB_OK+MB_ICONSTOP);
end;
三编写被控程序
新建一个项目Serverdpr并把一个TServerSocket元件放到Form上
它的属性设置如下Active设为TruePort设为其它属性按默认值
ServerSocket的OnClientRead事件代码如下
procedure TFormServerSocketClientRead
(Sender: TObject;Socket: TCustomWinSocket);
var
Str:PChar;
CodeV:Integer;
begin
Str:=PChar(SocketReceiveText); //接收字符串
Val(StrVCode); //处理接收的字符串首先转换字符串为整数
if Code< > then
ApplicationMessageBox(Str提示信息
MB_OK+MB_ICONINFORMATION)
//如果转换后的数据不是一个整型数就通过消息框来显示字符串
else
if (V=)or(V=)or(V=) then
ExitWindowsEx(V)
//调用Windows的API函数(V=表示重新登录
V=表示关机V=表示重启动)
else
ApplicationMessageBox(Str提示信息
MB_OK+MB_ICONINFORMATION);
//转换后数据不为时在消息框内显示字符串
end;
修改项目文件不让窗口显示并且防止它运行两次修改begin和end之间的代码如下
begin
ApplicationInitialize;
if FindWindow(TFormForm)= then begin
//当没有找到Form时执行下面代码
ApplicationShowMainForm:=False; //不显示主窗口
ApplicationCreateForm(TForm Form);
ApplicationRun;
end;
end
四注意事项
网络要装配正确并安装TCP/IP协议且要正常运行
首先要运行被控程序
必须知道对方的IP地址或主机名
不过要注意的是此程序可以远程控制对方的计算机请慎用如果出现问题笔者概不负责