您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于Socket网络编程的服务器远程监控系统的实现
基于Socket网络编程的服务器远程监控系统的实现詹璇,吕晓军,程清波,刘小燕,李明(中国铁道科学研究院电子计算技术研究所,北京100081)摘要:本文基于TCP/IP协议,利用Socket网络编程接口技术,在客户端/服务器模式下,设计了远程服务器监控系统,实现了对服务器性能的监测和对服务器的远程控制,最后给出了系统的运行结果。关键词:TCP/IP;Socket;远程监控;服务器ImplementationofServerRemoteMonitoringSystemBasedonSocketNetworkProgrammingZhanXuan,LvXiaojun,ChengQingbo,LiuXiaoyan,LiMing(InstituteofComputingTechnologies,ChinaAcademyofRailwaySciences,Beijing100081,China)Abstract:BasedontheTCP/IPprotocol,socketprogramminginterfacetechnologyisusedinthispaper,andaremoteservermonitoringsystemisdesignedinC/Smode,thustheperformancemonitoringandservercontrollingisimplemented,finally,theresultisdescribedinthispaper.KeyWords:TCP/IP;Socket;RemoteMonitoring;Server0引言随着计算机应用的普及和现代信息技术的快速发展,应用服务器在计算机应用的各个领域起着至关重要的作用,应用服务器的安全与工业控制系统的运行密切相关。应用服务器是实现中间层的方式,为工业控制系统提供一个高效、可靠的运行平台,应用服务器实现了客户端的业务逻辑和基础服务,如数据访问、负载均衡、事务控制、安全机制和失效恢复等服务。因此,有必要对应用服务器的性能等各方面进行监控。另外,对其工作状况进行远程监测和控制,不仅可以方便设备管理者随时了解设备的工作状态,设备出现异常时主动报警,便于及时维修,而且还可以拓宽设备的服务范围,提高工作性能,延长使用寿命。1TCP/IP与Socket介绍TCP/IP协议的应用开发接口是Socket(套接字),它是TCP/IP网络环境下的编程接口。它提供了不同主机间进程的双向通信端点,开发Socket的目的是屏蔽网络底层复杂的结构和协议。利用它可以构造任意的跨操作系统、跨网络协议的分布式处理系统。Socket是面向客户—服务器的模型,客户端随机申请一个Socket,系统为之分配一个随机的Socket号;服务器拥有全局公认的Socket号,任何客户都可以向它发出连接请求和传送信息请求。在进程开始通信之前,双方必须各自创建一个端点,否则是没有办法建立联系的。如下图所示介绍了Socket的客户—服务器模型时序图。时间服务器Socket()Bind()Listen()Accept()阻塞,等待客户连接请求Read()处理服务请求Write()客户Socket()Connect()Write()Read()服务响应连接建立服务请求图1面向连接的客户—服务器模型时序图首先,服务器进程会在约定的端口开启一个Socket,来进行监听,Accept()循环主要是负责在接受队伍中将每个客户的进程分别取出,在完成连接后产生一个新的Socket,这时候,服务器将会产生一个新的子进程对来自于客户的请求进行专门的处理,在处理完毕后再接着处理下一个客户请求。因为服务器端进行监听的Socket对新的子进程没有效用,所以新的子进程会将该Socket关闭,通过新生成的Socket实现与客户端的交互,直至客户端将连接关闭,新的子进程才会终止。2服务器远程监控系统的组成和架构服务器远程监控系统包括对服务器的远程监测、服务器远程控制和服务管理。其中服务器远程监测主要是对服务器的CPU、内存、网络数据包进行实时监测,远程控制是对服务器的进程、系统等进行远程控制,服务管理是监测服务中间件运行状态和对服务中间件进行远程操作。如下图所示:服务器远程监控系统服务器的远程监测服务器的远程控制服务管理CPU内存网络数据包进程控制系统控制服务状态监测服务重启图2服务器远程监控系统的组成服务器远程监控系统是一个C/S模式的软件,在服务器上安装ServerSpy.exe后主动连接客户端,可以支持多台客户端进行监控。如下图3所示:服务器端客户端1客户端2客户端3客户端n……图3服务器远程监控系统架构图3服务器远程监控系统设计3.1通信模式设计服务器端和客户端之间的网络通信是实现各种功能的前提,客户端发送指令,服务端接收指令并响应。本系统是在Delphi7环境下开发而成,Delphi是建立在原来的WindowsSocket库函数的基础上,并进行了一系列的包装,对相关的功能进行了封装,从而使编程变得更加简单。其中服务器端和客户端的网络通信利用了Delphi的Indy组件,Indy的全名是是InternetDirect,这是一套开放源代码的Internet控件集,支持大部分流行的Internet协议,包括TCP、UDP、DNS、ICMP等。本系统主要用到了INDY的idTCPServer和idTCPClient两个组件。idTCPClient组件封装一个完整的TCP客户端程序,支持Socket。使用TIdTCPClient组件要设置它的IP和Port属性,然后调用Connect方法。idTCPServer组件实现了一个多线程的服务端,它使用一个或者多个线程来接收客户端的连接,并联合idThreadMgr分配专门的线程来处理每一个客户端和服务器的连接。在线程中维持一个激活ThreadClass实例的列表。下面给出了idTCPServer的工作原理:主线程idTCPServer.Active:=True;…………IdTCPServer.Active:=false;监听线程客户端1连接请求客户端2连接请求……客户端n连接请求客户端1线程客户端2线程客户端n线程……图4idTCPServer的工作原理因为INDY组件是基于SOCKET阻塞工作模式,阻塞套接字调用在完成工作之后才返回,如果在程序主线程中进行此类调用,应用程序将不能正常处理用户界面消息,从而造成了用户界面的“死锁”。而在客户端添加一个TidAntiFreeze组件就可以避免用户界面“死锁”的发生,TIdAntiFreeze在INDY内部定时中断对栈的调用,并在中断期间调用Application.ProcessMessages方法处理消息,而外部的INDY调用继续保存阻塞状态,就好像TIdAntiFreeze对象不存在一样。这样界面“死锁”的问题就可以得到完满的解决。在客户端添加idTCPClient组件,在服务器端添加idTCPServer组件,这样它们之间就形成了TCP通信,具体客户端和服务器端之间的通信如下图:服务器端获取IP和Port请求连接连接成功是客户端否退出图5客户端和服务器端的通信3.2客户端与服务器端程序设计客户端在执行每个监测或者控制请求时,定义一个字符串链表,将请求的每个命令加入链表中,并在链表中逐个编号,例如查看进程的命令编号为22,关闭某个可疑进程的命令编号为23。然后发送命令,将客户端地址和发送命令编号作为参数发送给服务器端,服务器端来执行相应的操作。procedureTMainForm.BtnTerminateProcClick(Sender:TObject);//关闭进程varStrCmd:TStrings;beginif(LVProc.Selected=nil)thenbeginShowMessage('请选择你要关闭的进程!');exit;end;StrCmd:=TStringList.Create;StrCmd.Add('23|'+LVProc.Selected.SubItems.Strings[1]);SendCommand(StrCmd,CBClientP.Text);end;服务器端在接收到客户端发送来的命令时,首先进行服务探测,即判断是哪个客户端发送来的消息,识别客户端发送来的主机IP地址和端口号,与它建立建立,开始线程的执行。在线程执行时,先判断命令号,即客户端发送的命令编号,然后执行相应的操作。tryStrReceived:=AThread.Connection.ReadLn(#10#10);StrReceived:=Trim(StrReceived);StrMsg:=TStringList.Create;StrMsg.AddStrings(ExtractStr(StrReceived,'|'));CmdId:=StrToInt('$'+StrMsg[0]);MonThreadId:=AThread;caseCmdIdof$0://CONNECTSTART,服务探测,连接到探测器beginTCPSender.Host:=AThread.Connection.Socket.Binding.PeerIP;TCPSender.Port:=StrToInt(StrMsg[1]);TCPSender.Connect();if(TCPSender.Connected=false)thenbeginexit;end;if(SenderThread.Terminated)thenSenderThread.Executeelseif(SenderThread.Suspended)thenSenderThread.Resume;end;3.3运行结果运行结果如下图所示。下面展示了服务器的部分监测结果,图6为CPU使用情况,图7为内存使用情况,图8为进程管理情况,图9为服务管理。图6CPU使用情况图7内存使用情况图8进程管理图9服务管理4总结本文介绍了在客户端/服务器模式下的远程服务器监控系统,该系统基于TCP/IP协议,利用Socket网络编程接口技术,实现了对服务器性能的监测和对服务器的远程控制,详细介绍了服务器与客户端通信模式设计,客户端与服务器端设计,最后给出了运行结果。参考文献:[1]蒋东兴,林鄂华.WindowsSockets网络程序设计大全[M].北京:清华大学出版社,1999.[2]范建华,胥光辉,张涛等译.RICHARDSW.TCP/IP详解,卷1:协议[M].北京:机械工业出版社,2000.[3]李存斌,汪兵.Delphi深度编程及项目应用开发[M].北京:中国水利水电出版社,2002:180-188.[4]康鸿儒,陈虹,曹卫,基于Internet的远程操作技术研究[J],工业控制计算机,2002,15(1):25-29.[5]杨志红,徐袭,江汉红等,基于嵌入式肉络技术构建远程监测系统[J],测控技术,2002,21(8):47-48.[6]李小海,王旭永.基于的机器人远程控制的关键技术及典型实现[J],工业控制计算机,2000,13(2):51-53.[7]王晓峰,吴平东等.基于因特网的远程控制系统控制算法的研究[J].计算机应用研究,2003,20(4):141-143.[8]顾洪军,张佐,吴秋峰.网络控制系统的实时特性分析及数据传输技术[J].计算机工程与应用,2001,6:38-41.
本文标题:基于Socket网络编程的服务器远程监控系统的实现
链接地址:https://www.777doc.com/doc-2572128 .html