⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smsmanager.cpp

📁 pc实现短信收发的源程序
💻 CPP
字号:
// SmsManager.cpp: implementation of the CSmsManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "SmsTest.h"
#include "SmsManager.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
#define RETOK	"OK"
#define RETERR	"ERROR"

CSmsManager::CSmsManager()
{
    memset(m_szErrorMark , 0 , sizeof(m_szErrorMark)) ;
	m_bInit  = false ;
}

CSmsManager::~CSmsManager()
{

}

int  CSmsManager::Init() 
{
	 //char   szInit[] = "AT\x0d" ;
	 //char   szGsmSet[] = "AT+CMGF=0\xd\xa" ;
	 char   szInit[] = "ATE0;+IPR=9600;+CMEE=0\r" ;
	 char   szGsmSet[] = "AT+CMGF=0\r" ;
	 char   szRecBuff[1024] = "" ;
	 char   szTmp[128] = "AT\r" ;
	 DWORD  dwLen ;

	 m_bInit = false ;
     if ( m_hCom == INVALID_HANDLE_VALUE ) 
	 {
		 memset(m_szErrorMark , 0 , sizeof(m_szErrorMark)) ;
		 sprintf(m_szErrorMark , "串行口 %s 没有正确打开, " , m_strPort ) ;
		 return -1 ;
	 }
	 if ( !Read(szRecBuff , sizeof(szRecBuff) , dwLen) ) 
	 {
		 memset(m_szErrorMark , 0 , sizeof(m_szErrorMark)) ;
		 sprintf(m_szErrorMark , "串行口 %s 读错误 " , m_strPort ) ;
		 return -1 ;
	 } 

	 if ( !Write(szTmp , sizeof(szTmp) , dwLen ) )
	 {
		 memset(m_szErrorMark , 0 , sizeof(m_szErrorMark)) ;
		 sprintf(m_szErrorMark , "串行口 %s 写不成功, " , m_strPort ) ;
		 return -1 ;
	 }


	 Sleep(100) ;
	 memset(szRecBuff, 0 , sizeof(szRecBuff)) ;
     if ( !Read(szRecBuff , sizeof(szRecBuff) , dwLen) ) 
	 {
		 memset(m_szErrorMark , 0 , sizeof(m_szErrorMark)) ;
		 sprintf(m_szErrorMark , "串行口 %s 读错误 " , m_strPort ) ;
		 return -1 ;
	 }

	 /*
	 if ( dwLen <= 0 || strstr(szRecBuff,RETOK) == NULL ) 
	 {		 
		 sprintf(m_szErrorMark , "没有收到GSM MODEM回应,[%s][%d] " , szRecBuff,dwLen ) ;
		 return -1 ;
	 }
	*/

     if ( !Write(szInit , sizeof(szInit) , dwLen ) )
	 {
		 memset(m_szErrorMark , 0 , sizeof(m_szErrorMark)) ;
		 sprintf(m_szErrorMark , "串行口 %s 写不成功, " , m_strPort ) ;
		 return -1 ;
	 }
	 Sleep(500) ;
	 memset(szRecBuff, 0 , sizeof(szRecBuff)) ;
     if ( !Read(szRecBuff , sizeof(szRecBuff) , dwLen) ) 
	 {
		 memset(m_szErrorMark , 0 , sizeof(m_szErrorMark)) ;
		 sprintf(m_szErrorMark , "串行口 %s 读错误 " , m_strPort ) ;
		 return -1 ;
	 }
	 if ( dwLen <= 0 || strstr(szRecBuff,RETOK) == NULL ) 
	 {		 
		 sprintf(m_szErrorMark , "没有收到GSM MODEM回应,[%s][%d] " , szRecBuff,dwLen ) ;
		 return -1 ;
	 }
	 if ( !Write(szGsmSet , sizeof(szGsmSet) , dwLen ) )
	 {
		 memset(m_szErrorMark , 0 , sizeof(m_szErrorMark)) ;
		 sprintf(m_szErrorMark , "串行口 %s 写不成功" , m_strPort ) ;
		 return -1 ;
	 }
     Sleep(100) ;
	 memset(szRecBuff, 0 , sizeof(szRecBuff)) ;
	 if ( !Read(szRecBuff , sizeof(szRecBuff) , dwLen) ) 
	 {
		 memset(m_szErrorMark , 0 , sizeof(m_szErrorMark)) ;
		 sprintf(m_szErrorMark , "串行口 %s 读错误 " , m_strPort ) ;
		 return -1 ;
	 }
	 if ( dwLen <= 0 || strstr(szRecBuff,RETOK) == NULL ) 
	 {		 
		 sprintf(m_szErrorMark , "设置GSM MODEM回应失败,[%s][%d] " , szRecBuff,dwLen ) ;
		 return -1 ;
	 }
	 m_bInit = true ;
	 return 0 ;
}

int  CSmsManager::SendSms(char szDesMoblie[] , char szSmsInfo[]   ) 
{
	DWORD     dwWriteLen ;
    char      pSndBuff[500] = ""  ;
    int       nMsgLen ;

	nMsgLen = strlen(szSmsInfo) ;
	if ( nMsgLen > 140 ) 
	{
        memset(m_szErrorMark , 0 , sizeof(m_szErrorMark)) ;
		sprintf(m_szErrorMark , "发送长度 %d 超过了最大长度 140  " , nMsgLen ) ;
		return -1 ;
	}

	if ( !m_bInit ) 
	{
        memset(m_szErrorMark , 0 , sizeof(m_szErrorMark)) ;
		sprintf(m_szErrorMark , "串行口 %s GSM MODEM没有正确初始化 " , m_strPort ) ;
		return -1 ;
	}
		
	m_smsInfo.Init() ;
	if ( m_smsInfo.SetSndBuffData(szDesMoblie ,szSmsInfo  ) != 0 )
	{
	    memset(m_szErrorMark , 0 , sizeof(m_szErrorMark)) ;
		sprintf(m_szErrorMark , "数据转换不成功 "  ) ;
		return -1 ;
		
	};

	memcpy(pSndBuff , &m_smsInfo.m_MsgPack , m_smsInfo.m_nCurTotalLen ) ;
	nMsgLen = m_smsInfo.m_nCurTotalLen ;
	if ( !Write(pSndBuff ,nMsgLen  , dwWriteLen ) )
	{
		memset(m_szErrorMark , 0 , sizeof(m_szErrorMark)) ;
		sprintf(m_szErrorMark , "串行口 %s 写不成功[%d]" , m_strPort,nMsgLen ) ;
		return -1 ;
	};
	char szBuf[128] ;
	DWORD dwGet ;
	if(!Read(szBuf,128,dwGet) )
	{
		sprintf(m_szErrorMark , "发送成功,读返回信息失败。" ) ;
		return -1 ;
	}
	if(dwGet <=0 || strstr(szBuf,RETERR)!=NULL)
	{
		sprintf(m_szErrorMark , "发送成功,读返回信息不正确[%s][%d]。",szBuf,dwGet ) ;
		return -1 ;
	}
    return 0 ;	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -