Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14498122
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:33:32

下载本文示例代码
  简介:  在通信行业和网络行业,往往需要对一些重要的系统进行24小时的监控,随着短信的兴起,在传统监控系统中增加短信告警就会非常实用,本文介绍了简单的分布式短信监控系统的设计与实现。  基本的设计思路如下:  1) 在一个稳定的Socket通讯包中进行代码改造,在中找到一个分为Client/Server端的通讯程序,连接方式有TCP/UDP两种方式选择,一个server可连接多个client端,client/server之间可对发数据  2) 在需要被监控的程序(这里假设为MonitorProg.exe)中增加定时写数据库的功能,一般来说设为5分钟,这里是将数据库作为监控数据的一个中间存贮  3) 改造Socket通讯的客户端程序,让Client.exe定期读数据库中的时间,如果时间在某个阶段不变说明被监控程序不正常  4) 改造Socket通讯的Server端程序,接受Client端的告警信息然后通过短信接口发送出去,发送短信的方式有很多,这里采用GSM Modem发送短信,在VC代码中采用MSComm控件来向GSMModem写串口数据.  补充:以上的设计思路中采用定期写入当前时间的方式进行监控,这对系统的性能或许有一定影响,这就需要在稳定性和性能两方面进行权衡.  以下为具体的实现步骤:  1) 建数据库表 create table Module_Tbl_Monitor( ExeName varchar(5), //被监控程序名称 EnterTime varchar(20) //监控时间)insert into Module_tbl_monitor values('Exe1','2005-12-28 14:00:00')//插入一条记录,表示对Exe1程序进行监控  2) 修改client端程序  Client端只需要增加一个定期读数据库的代码. /****************************************************************************Description: (全局)连接数据库*Parameters: sSection --- 配置文件SectionsName --- 配置项sDefaultValue --- 缺省值*Author: *Version: 1.0*Date: 2005-3-8 17:27*Cautions: 无**************************************************************************/void connectDB(){  if(FAILED(m_pConnection.CreateInstance("ADODB.Connection"))) {  AfxMessageBox("Create Instance failed!"); } try {  m_pConnection->Open("DSN=??;UID=sa;PWD=??","","",-1);//数据库连接串 } catch(_com_error e) {  //char mybuf[10240];  //wsprintf(mybuf,"Description = '%s'\n",(char*)e.Description());  AfxMessageBox("Connect to database error!"); }}/****************************************************************************Description: 从数据库中获取监控数据*Parameters: *Author: *Version: 1.0*Date: 2006-1-6 *Cautions: 无**************************************************************************/void CClientSocketDlg::getData(){ m_pRecordset.CreateInstance(__uuidof(Recordset)); m_pRecordset->Open("select * from Module_Tbl_Monitor",   m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); m_pRecordset->MoveFirst(); _variant_t Holder; int iNum = 1; CString machineName;  CString sTime = ""; while(!m_pRecordset->adoEOF) {  ……..  //如果时间没变,向Server发送告警信息 }  3) 修改server端程序  短信发送代码 void CServerSocketDlg::SendSMS(CString sSMSText){ if(!iOnOrOff) {  return; } if(m_msComm.GetPortOpen()) //如果串口是打开的,则先关闭串口 {  m_msComm.SetPortOpen(FALSE); } m_msComm.SetCommPort(1); //选择COM1 m_msComm.SetInBufferSize(1024); //接收缓冲区 m_msComm.SetOutBufferSize(1024);//发送缓冲区 m_msComm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取 m_msComm.SetInputMode(1);//以二进制方式读写数据 m_msComm.SetRThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件 m_msComm.SetSettings("9600,n,8,1");//波特率9600无检验位,8个数据位,1个停止位 if(!m_msComm.GetPortOpen())//如果串口没有打开则打开  m_msComm.SetPortOpen(TRUE);//打开串口 else  m_msComm.SetOutBufferCount(0); //通过AT指令发送SMS if(m_msComm.GetPortOpen()) {  CString sReceiver;  CString m_strTXData;  m_strTXData = "AT CMGF=1\r\n";  m_msComm.SetOutput(COleVariant(m_strTXData));//发送数据  for(int i = 0; i < sReceiverArr.GetSize(); i )  {   sReceiver = sReceiverArr[i];    m_strTXData="AT CMGS=" sReceiver " \r\n";   Sleep(2000);   m_msComm.SetOutput(COleVariant(m_strTXData));//发送数据   m_strTXData = sSMSText " \x01a";   Sleep(2000);   m_msComm.SetOutput(COleVariant(m_strTXData));//发送数据    Sleep(2000);  } }}   Client端运行界面  Server端运行界面   简介:  在通信行业和网络行业,往往需要对一些重要的系统进行24小时的监控,随着短信的兴起,在传统监控系统中增加短信告警就会非常实用,本文介绍了简单的分布式短信监控系统的设计与实现。  基本的设计思路如下:  1) 在一个稳定的Socket通讯包中进行代码改造,在中找到一个分为Client/Server端的通讯程序,连接方式有TCP/UDP两种方式选择,一个server可连接多个client端,client/server之间可对发数据  2) 在需要被监控的程序(这里假设为MonitorProg.exe)中增加定时写数据库的功能,一般来说设为5分钟,这里是将数据库作为监控数据的一个中间存贮  3) 改造Socket通讯的客户端程序,让Client.exe定期读数据库中的时间,如果时间在某个阶段不变说明被监控程序不正常  4) 改造Socket通讯的Server端程序,接受Client端的告警信息然后通过短信接口发送出去,发送短信的方式有很多,这里采用GSM Modem发送短信,在VC代码中采用MSComm控件来向GSMModem写串口数据.  补充:以上的设计思路中采用定期写入当前时间的方式进行监控,这对系统的性能或许有一定影响,这就需要在稳定性和性能两方面进行权衡.  以下为具体的实现步骤:  1) 建数据库表 create table Module_Tbl_Monitor( ExeName varchar(5), //被监控程序名称 EnterTime varchar(20) //监控时间)insert into Module_tbl_monitor values('Exe1','2005-12-28 14:00:00')//插入一条记录,表示对Exe1程序进行监控  2) 修改client端程序  Client端只需要增加一个定期读数据库的代码. /****************************************************************************Description: (全局)连接数据库*Parameters: sSection --- 配置文件SectionsName --- 配置项sDefaultValue --- 缺省值*Author: *Version: 1.0*Date: 2005-3-8 17:27*Cautions: 无**************************************************************************/void connectDB(){  if(FAILED(m_pConnection.CreateInstance("ADODB.Connection"))) {  AfxMessageBox("Create Instance failed!"); } try {  m_pConnection->Open("DSN=??;UID=sa;PWD=??","","",-1);//数据库连接串 } catch(_com_error e) {  //char mybuf[10240];  //wsprintf(mybuf,"Description = '%s'\n",(char*)e.Description());  AfxMessageBox("Connect to database error!"); }}/****************************************************************************Description: 从数据库中获取监控数据*Parameters: *Author: *Version: 1.0*Date: 2006-1-6 *Cautions: 无**************************************************************************/void CClientSocketDlg::getData(){ m_pRecordset.CreateInstance(__uuidof(Recordset)); m_pRecordset->Open("select * from Module_Tbl_Monitor",   m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); m_pRecordset->MoveFirst(); _variant_t Holder; int iNum = 1; CString machineName;  CString sTime = ""; while(!m_pRecordset->adoEOF) {  ……..  //如果时间没变,向Server发送告警信息 }  3) 修改server端程序  短信发送代码 void CServerSocketDlg::SendSMS(CString sSMSText){ if(!iOnOrOff) {  return; } if(m_msComm.GetPortOpen()) //如果串口是打开的,则先关闭串口 {  m_msComm.SetPortOpen(FALSE); } m_msComm.SetCommPort(1); //选择COM1 m_msComm.SetInBufferSize(1024); //接收缓冲区 m_msComm.SetOutBufferSize(1024);//发送缓冲区 m_msComm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取 m_msComm.SetInputMode(1);//以二进制方式读写数据 m_msComm.SetRThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件 m_msComm.SetSettings("9600,n,8,1");//波特率9600无检验位,8个数据位,1个停止位 if(!m_msComm.GetPortOpen())//如果串口没有打开则打开  m_msComm.SetPortOpen(TRUE);//打开串口 else  m_msComm.SetOutBufferCount(0); //通过AT指令发送SMS if(m_msComm.GetPortOpen()) {  CString sReceiver;  CString m_strTXData;  m_strTXData = "AT CMGF=1\r\n";  m_msComm.SetOutput(COleVariant(m_strTXData));//发送数据  for(int i = 0; i < sReceiverArr.GetSize(); i )  {   sReceiver = sReceiverArr[i];    m_strTXData="AT CMGS=" sReceiver " \r\n";   Sleep(2000);   m_msComm.SetOutput(COleVariant(m_strTXData));//发送数据   m_strTXData = sSMSText " \x01a";   Sleep(2000);   m_msComm.SetOutput(COleVariant(m_strTXData));//发送数据    Sleep(2000);  } }}   Client端运行界面  Server端运行界面 下载本文示例代码


CS模式短信监控系统的设计与实现CS模式短信监控系统的设计与实现CS模式短信监控系统的设计与实现CS模式短信监控系统的设计与实现CS模式短信监控系统的设计与实现CS模式短信监控系统的设计与实现CS模式短信监控系统的设计与实现CS模式短信监控系统的设计与实现CS模式短信监控系统的设计与实现CS模式短信监控系统的设计与实现CS模式短信监控系统的设计与实现CS模式短信监控系统的设计与实现CS模式短信监控系统的设计与实现CS模式短信监控系统的设计与实现CS模式短信监控系统的设计与实现
阅读(96) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~