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

📄 smm.cpp

📁 手机开发环境BREW实例
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// SMM.cpp: implementation of the CSMM class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "SMM4COM.h"
#include "SMM.h"
#include "winsock2.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSMM::CSMM()
{
	m_szInBuffer[0] = '\0';
	m_szOutBuffer[0] = '\0';
	m_szTempBuffer[0] = '\0';
}

CSMM::~CSMM()
{

}

//////////////////////////////////////////////////////////////////////////
//功能描述:
//    把ANSI字符集转换成 UNICODE字符集;
//参数描述:
//    szConvertString:输入,待转换的字符串指针;
//    szConvertedString:输出,接收转换后的十六进制码;
//返回值描述:
//    0:成功
//    1:失败
//////////////////////////////////////////////////////////////////////////
BOOL CSMM::ANSI2UCS2(char * szConvertString,char * szConvertedString)
{
	char szTemp[5];
	int i;
	int nConvertResult;

	WCHAR wszConveredString[BUFFER_SIZE_OUT];
//开始转换:
	nConvertResult = MultiByteToWideChar(936,0,szConvertString,-1,wszConveredString,sizeof(wszConveredString)/sizeof(wszConveredString[0])) - 1;
//以下是取出UNICODE字符的十六进制码放入szConvertedString
	if(nConvertResult)
	{
		for(i = 0; i < nConvertResult; i++)
		{
			sprintf(szTemp,"%04x",(unsigned short)wszConveredString[i]);
			strcat(szConvertedString, szTemp);
		}
		return 0;
	}
	else
	{
		return 1;
	}
}

////////////////////////////////////////////////////////////////////////
//功能描述:
//    把UNICODE字符集转换成 ANSI字符集;
//参数描述:
//    wszConvertString:输入,待转换的字符串指针;
//    szConvertedString:输出,接收转换后字符串指针;
//返回值描述:
//    0:成功
//    1:失败
//////////////////////////////////////////////////////////////////////////
BOOL CSMM::UCS22ANSI(char * wszConvertString,char * szConvertedString)
{
	int nANSILen = 0;
	int nUNICODELen = 0;
	int nLen;

	nUNICODELen = wcslen((unsigned short *)wszConvertString);

	nANSILen = WideCharToMultiByte(936, WC_COMPOSITECHECK,(LPWSTR)wszConvertString, nUNICODELen, NULL, 0, NULL, NULL);

	nLen = WideCharToMultiByte(936, WC_COMPOSITECHECK,(const unsigned short *)wszConvertString, nUNICODELen, szConvertedString, nANSILen, NULL, NULL);

	szConvertedString[nLen] = 0;
	if(!nLen)
		return 1;
	else
		return 0;
}


//////////////////////////////////////////////////////////////////////////
//功能描述:
//    设置短消息初始化命令;
//参数描述:
//    szInitCommand:输入,初始化AT指令;
//    
//返回值描述:
//    0:成功
//    1:失败
//////////////////////////////////////////////////////////////////////////
BOOL CSMM::SetATCmd(char * szInitCommand)
{
	int nErr;

	m_szTempBuffer[0] = '\0';
	m_szInBuffer[0] = '\0';

	sprintf(m_szTempBuffer,"%s",szInitCommand);//拼AT命令;
	strcat(m_szTempBuffer,"\r");

	nErr = SendCmd(m_szTempBuffer,m_szInBuffer,BUFFER_SIZE_IN);//发送命令;

	if(!nErr)
	{

		if(strstr(m_szInBuffer,"OK") == NULL)
		{
			return 1;			
		}
		else
		{
			return 0;			
		}
	}
	else
		return 1;
}

//////////////////////////////////////////////////////////////////////////
//功能描述:
//    发送短信;
//参数描述:
//    szMobileID:输入,手机号码;
//    szContent :输入,待发内容;
//返回值描述:
//    0:成功
//    1: 失败;
//注意:此函数要调用ANSI2UCS2函数,把手机号码&待发内容转换成UNICODE型;
//////////////////////////////////////////////////////////////////////////
BOOL CSMM::SMSSend(char * szMobileID,char * szContent)
{
	//AT命令&发送手机号&内容

	int nErr;

	m_szOutBuffer[0] = '\0';
	m_szTempBuffer[0] = '\0';

	sprintf(m_szOutBuffer,"%s",COMMAND_SMS_SEND);
	strcat(m_szOutBuffer,"\"");

	//把手机号转换成UNICODE型,如果成功;
	if(!ANSI2UCS2(szMobileID,m_szTempBuffer))
	{
		//组拼命令&手机号;

		strcat(m_szOutBuffer,m_szTempBuffer);
		strcat(m_szOutBuffer,"\"");
		strcat(m_szOutBuffer,"\r");

		//发送AT命令&手机号;
		m_szInBuffer[0] = '\0';

		nErr = SendCmd(m_szOutBuffer,m_szInBuffer,BUFFER_SIZE_IN );

		if(!nErr)
		{
			//组拼待发内容;
			//把待发内容转换成UNICODE型,如果成功

			m_szTempBuffer[0] = '\0';

			if(!ANSI2UCS2(szContent,m_szTempBuffer))
			{
				m_szOutBuffer[0] = '\0';

				strcat(m_szOutBuffer,m_szTempBuffer);
				strcat(m_szOutBuffer,"\x1a");
				
				m_szInBuffer[0] = '\0';

				nErr = SendCmd(m_szOutBuffer,m_szInBuffer,BUFFER_SIZE_IN);//发送内容;

				if(!nErr)
				{
					//如果成功,返回值必有”OK“;
					if(strstr(m_szInBuffer,"OK") != NULL)
					{
						return 0;
					}
					else
					{
						return 1;
					}
				}
				else
				{
					return 1;
				}
			}
			else
			{
				return 1;
			}
		}
		else
		{
			return 1;
		}
	}
	else 
		return 1;
}

//////////////////////////////////////////////////////////////////////////
//功能描述:
//    接收短消息的记录号;
//参数描述:
//    无;
//返回值描述:
//    >0:成功(返回没有阅读的最近的短消息的记录号)
//    0 : 失败
//////////////////////////////////////////////////////////////////////////
int CSMM::SMSRecv()
{
	char * pDestination;
	char cTempNO[4];
	int nCharIndex,nCharNum;
	int nErr;
	int nFindChar = ',';
	
	m_szInBuffer[0] = '\0';
	cTempNO[0] = '\0';

	//发送命令;
	nErr = ReadCmd(m_szInBuffer,BUFFER_SIZE_IN);

	if(!nErr)
	{

		//成功表示有短消息;
		if(strstr(m_szInBuffer,"+CMTI:") != NULL)
		{
			nCharNum = strlen(m_szInBuffer);
			//返回状态一定有一个“,”,而后面就是记录号;
			pDestination = strrchr(m_szInBuffer,nFindChar);
			nCharIndex = pDestination - m_szInBuffer;

			if(pDestination != NULL)
			{
				nCharNum -= (nCharIndex + 1);
				strncpy(cTempNO,m_szInBuffer + (nCharIndex + 1),nCharNum);
				cTempNO[nCharNum] = 0;
				int nIndex = atoi(cTempNO);
				return nIndex;
			}
			else
				return 0;
		}
		else
			return 0;
	}
	else
		return 0; 
}

//////////////////////////////////////////////////////////////////////////
//功能描述:
//    根据短消息的记录号,接收短消息;
//参数描述:
//    szSMSContent:输出,阅读的最近的短消息内容;
//    nIndex:输入,没有阅读的最近的短消息的记录号;
//返回值描述:
//    0:成功
//    1:失败
//////////////////////////////////////////////////////////////////////////
BOOL CSMM::SMSRead(char * szSMSContent,int nIndex)
{
	int nFindChar;
	int nCharIndexStart,nCharIndexEnd,nContentLength;
	int i,nErr;
	char * pDestination;
	char cTemp[5];
	wchar_t szRecvAddress[BUFFER_SIZE_TEMP];

	m_szOutBuffer[0] = '\0';
	cTemp[0] = '\0';

	//拼阅读命令"AT+CMGR="
	sprintf(m_szOutBuffer,"%s%d",COMMAND_SMS_READ,nIndex);
	strcat(m_szOutBuffer,"\r");

	m_szInBuffer[0] = '\0';

	//发送阅读命令;
	nErr = SendCmd(m_szOutBuffer,m_szInBuffer,DEFAULT_BUFFER_SIZE * 2);
	
	if(!nErr)
	{//成功一定返回“OK”

⌨️ 快捷键说明

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