CS模式短信监控系统的设计与实现 (转)
2007-04-20 10:40
337 查看
简介:
在通信行业和网络行业,往往需要对一些重要的系统进行24小时的监控,随着短信的兴起,在传统监控系统中增加短信告警就会非常实用,本文介绍了简单的分布式短信监控系统的设计与实现。
基本的设计思路如下:
1) 在一个稳定的Socket通讯包中进行代码改造,在www.codeproject.com中找到一个分为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 --- 配置文件Section
sName --- 配置项
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端运行界面
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1488037
在通信行业和网络行业,往往需要对一些重要的系统进行24小时的监控,随着短信的兴起,在传统监控系统中增加短信告警就会非常实用,本文介绍了简单的分布式短信监控系统的设计与实现。
基本的设计思路如下:
1) 在一个稳定的Socket通讯包中进行代码改造,在www.codeproject.com中找到一个分为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 --- 配置文件Section
sName --- 配置项
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端运行界面
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1488037
相关文章推荐
- CS模式短信监控系统的设计与实现
- 《威博文件管理系统》3.0中短信系统的设计与实现
- 设计模式:如何使用观测者模式实现监控和推送
- 请问 Web Socket的实时通信监控系统设计与实现 要怎么实现?
- 基于视频处理的DSP系统通用设计模式及其实现
- 系统架构设计——设计模式之代理模式(二)CGLIB动态代理实现
- 基于IP网络的数字音视频监控系统设计与实现
- 【游戏设计模式】之二 论撤消重做、回放系统的优雅实现:命令模式
- 基于TCP/IP协议的电力通信综合监控管理系统设计与实现
- Linux服务器系统监控框架与MSN、E-mail、手机短信报警的实现
- 车载静中通监控系统的设计与实现
- 网站实时监控系统的设计与实现
- 【5. 监控调度处理模块】云跳板机服务系统设计及实现
- 虚拟机监控系统的设计与实现 (一) 综述
- 基于S3C6410的视频监控系统的设计与实现[图]
- Linux服务器系统监控框架与MSN、E-mail、手机短信报警的实现
- 虚拟机监控系统的设计与实现 (二) Collectd
- 网站实时监控系统的设计与实现
- 嵌入式视频监控毕业设计过程中保存的标签。。。嵌入式系统视频信号接收、显示 与存储程序设计与实现
- 有关实验室电源远程监控系统的设计与实现