客户端从Config.ini获取管理端的IP地址和开放端口(8080),客户端得知IP和端口后便主动向管理端发送连接请求,管理端接受请求与客户端建立连接,管理端想对客户端实施监控操作时,便发送操作指令给客户端,客户端接受指令并在内部解析,客户端得出结果并返回给管理端,管理端在界面上显示出返回的操作结果。 copyright paper51.com 要建立与服务器的连接,应首先要知道服务器的IP地址和开放通信端口,在1024以下的端口号中,很多都已经分配出去了,如FTP的端口为20和21,SMTP的端口是25,WEB服务器的端口为80等,为防止无意间的冲突,选择了8080为客户端的开放通信端口。 内容来自论文无忧网 www.paper51.com 在客户端有个Config.ini的服务器配置文件,在文件里输入服务器的主机IP以及服务器开放的通信端口8080,这样就指定好了服务器的IP和端口 内容来自论文无忧网 www.paper51.com begin paper51.com
filepath := ExtractFilePath(Application.ExeName); 内容来自论文无忧网 www.paper51.com inifile := TIniFile.Create(filepath +'Config.ini'); copyright paper51.com IP_str :=inifile.ReadString('服务器设置','服务器地址','127.0.0.1'); paper51.com
post_int := inifile.ReadInteger('服务器设置','端口',8080); paper51.com Gjtime := 1; http://www.paper51.com Servername:=IP_str; copyright paper51.com end; paper51.com 运行客户端通过config.ini得知管理端的IP和通信端口后便主动向管理端发送连接请求,要实现主动连接管理端这里用到了一个Timer控件,在客户端上添加一个Timer控件,把控件的interval属性设置为10000,也就是每隔10000毫秒向管理端发送一次连接请求。 paper51.com 以下代码便是利用Timer控件主动连接管理端的判断语句,如果建立连接,就向管理端发送被监视电脑的计算机名称、IP地址和操作系统类型。 copyright paper51.com
procedureTServerForm.Timer1Timer(Sender: TObject); http://www.paper51.com begin copyright paper51.com try copyright paper51.com if not IdTCPClient1.Connected then http://www.paper51.com
begin copyright paper51.com if ConRpcport(IdTCPClient1) then 内容来自论文无忧网 www.paper51.com begin 内容来自www.paper51.com if not IdTCPClient1.Connected then exit; 内容来自论文无忧网 www.paper51.com
SendStreamToClient(IdTCPClient1,'000',ComputerName+#13+GetOSName(GetOSVersion)); copyright paper51.com
ClientHandleThread:=TClientHandleThread.Create; http://www.paper51.com
end; 内容来自论文无忧网 www.paper51.com end; 内容来自www.paper51.com
except paper51.com end; http://www.paper51.com end; http://www.paper51.com
当客户端发送连接请求时,管理端在线便可以接收到客户端的请求,并与客户端建立连接,同时在界面通过ListView控件显示客户端的电脑名称、IP地址、操作系统。StatusBar控件显示已成功启动和在线主机有几台 copyright paper51.com begin paper51.com
count:=0; http://www.paper51.com MyFirstBmp:=TMemoryStream.Create; 内容来自论文无忧网 www.paper51.com IdTCPServer1.DefaultPort:=8080 ;//服务器端口 内容来自论文无忧网 www.paper51.com IdTCPServer1.Active:=true; copyright paper51.com
if IdTCPServer1.Active then paper51.com StatusBar1.Panels.Items[0].Text:='已成功启动'; paper51.com StatusBar1.Panels.Items[1].Text:='在线主机0台'; 内容来自www.paper51.com
end; 内容来自论文无忧网 www.paper51.com 判断在线主机有几台: 内容来自www.paper51.com procedureTMainForm.ListView1Change(Sender: TObject; Item: TListItem; http://www.paper51.com
Change: TItemChange); 内容来自论文无忧网 www.paper51.com begin 内容来自论文无忧网 www.paper51.com
StatusBar1.Panels.Items[1].Text:='在线主机'+inttostr(ListView1.Items.Count)+'台'; copyright paper51.com
end; paper51.com 3.3.5 自定义控制协议标识符 paper51.com 客户端和管理端建立连接以后,客户端通过管理端操作界面上的每个功能按钮来对被监视电脑进行操作,这里要说明的是在这个程序里管理端向客户端发送的操作指令是自定义的控制协议标识符,用010、012等阿拉伯数字来表示,这些自定义标识符的作用就是管理端和客户端之间的协议,管理端通过发送这些标识符来告诉客户端该做什么。 http://www.paper51.com 管理端通过自定义函数ZhuDongCmdSend向客户端发送标识符,例如: http://www.paper51.com
procedureTMainForm.SpeedButton4Click(Sender: TObject); paper51.com
begin http://www.paper51.com ZhuDongCmdSend('093','', false); 内容来自www.paper51.com
end; 内容来自www.paper51.com
其中093就代表的是关机标识符 paper51.com 客户端收到093这个指令后在自己协议列表里寻找093这个指令的意思并进行操作: 内容来自论文无忧网 www.paper51.com if RDStrList[0] = '093'then //关机 内容来自论文无忧网 www.paper51.com begin 内容来自论文无忧网 www.paper51.com
SOkz(1); 内容来自www.paper51.com exit; 内容来自论文无忧网 www.paper51.com end; 内容来自www.paper51.com 当找到093为关机指令时,调用Sokz函数进行关机操作。 paper51.com
|