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

📄 mobmsgdlg.cpp

📁 一个完整的短讯网关示例,支持短讯收发,支持UDP及Text格式.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	{
		SendSystemInfo("手机连接失败!",0);
		return;
	}
	memset(Sendinstruction,0,20);
	::Sleep(300);
	memcpy(Sendinstruction,"AT+CMGF=0",9);///##########执行AT+CMGF=0操作
	memcpy(Sendinstruction+strlen(Sendinstruction),"\r",2);
	if (!WriteFile(Mobile, Sendinstruction, strlen(Sendinstruction), &num, NULL))
	{
		SendSystemInfo("手机连接失败!",0);
		return;
	}
	memset(Sendinstruction,0,20);
	memcpy(Sendinstruction,"AT+CMGS=",8);///##########执行AT+CMGS=操作
	memcpy(Sendinstruction+strlen(Sendinstruction),StrLength,strlen(StrLength));
	memcpy(Sendinstruction+strlen(Sendinstruction),"\r",2);
	::Sleep(500);
	if (!WriteFile(Mobile, Sendinstruction, strlen(Sendinstruction), &num, NULL))
	{
		SendSystemInfo("手机连接失败!",0);
		return;
	}
	memcpy(cSendShortMsgToMob,instruction,strlen(instruction));//最终所发送的
	memcpy(cSendShortMsgToMob+strlen(cSendShortMsgToMob),"\x01a\r",7);

	int iinstrlen =strlen(cSendShortMsgToMob);
	::Sleep(2000);
	if (!WriteFile(Mobile, cSendShortMsgToMob, iinstrlen, &num, NULL))
	{
		SendSystemInfo("手机连接失败!",0);
		return;
	}
	CString sSendMsg = "(" ;
	sSendMsg = sSendMsg + sMobNo + ")" +MsgInfo;
	SendSystemInfo("短信已发出!"+sSendMsg,1);
	return;
}
///////////////////////////////////////////////////////////
//////////////以下为读写短讯的代码
////////////////////////////////////////////////////////////
wchar_t* translateFromUnicode(char *buf, int len)
{
	wchar_t *wStr;
	char *str = new char[len+2];
	memset(str, 0, len+2);
	for (int i = 0; i<len/2; i++)
	{
		str[i*2] = buf[i*2+1];
		str[i*2+1] = buf[i*2];
	}
	wStr = (wchar_t*)str;
	return wStr;
}
char* charToHex(char *cBuf)
{
	int len = strlen(cBuf)/2;
	char *buf = new char[len+1];
	memset(buf, 0, len+1);
	
	char cTmp;
	for (int i = 0; i<len; i++)
	{
		if (cBuf[i*2]>'9')
			cTmp = cBuf[i*2] - 'A' + 10;
		else cTmp = cBuf[i*2] - '0';
		
		buf[i] = cTmp <<4;
		if (cBuf[i*2+1] > '9')
			cTmp = cBuf[i*2+1] - 'A' +10;
		else cTmp = cBuf[i*2+1] - '0';
		buf[i] = cTmp | buf[i];
	}
	return buf;
}
char* getPhoneNumber(char *buf, int len)
{
	memset(SenderBuf,0,1024);
	for (int i = 0; i<(len+1)/2; i++)
	{
		SenderBuf[i*2] = buf[i*2+1];
		SenderBuf[i*2+1] = buf[i*2];
	}
	SenderBuf[len] = 0;
	return SenderBuf;
}
char* translateFromMobile(char *buf)
{
	int num = strlen(buf);
	int nCnt = (int)ceil(num*8.0/7) + 1;
	char* oBuf = new char[nCnt];
	memset(oBuf, 0, nCnt);
	unsigned char remain = 7; //当前字符还要几位才满
	unsigned char cTmp, flag;
	nCnt = 0;
	
	for (int i = 0; i<num; i++)
	{
		flag = 0x7F;
		flag = flag >> (7 - remain);
		cTmp = buf[i] & flag;
		cTmp = cTmp << (7 - remain);
		oBuf[nCnt] = oBuf[nCnt] | cTmp;
		nCnt++;
		
		flag = 0xFF;
		flag = flag << remain;
		cTmp = buf[i] & flag;
		cTmp = cTmp >> remain;
		oBuf[nCnt] = cTmp;
		remain = 7 - (8 - remain);
		if (remain == 0)
		{
			remain = 7;
			nCnt++;
		}
	}
	return oBuf;
}
//-----------------------------------与点播服务交流消息
bool SendOrGetMsgFromServer()
{
	HOSTENT *host;
	int nRtn = 0;
	SOCKADDR_IN addrSrv;
	sockClt = socket(AF_INET,SOCK_STREAM,0);
	if (sockClt == INVALID_SOCKET)
	{
		SendSystemInfo("与点播服务器连接失败!",0);
		return false;
	}
	CString sTmpInfo = "";
	host = gethostbyname(ServerIP);
	addrSrv.sin_family = AF_INET;
	addrSrv.sin_port = htons(iServerPort);
	addrSrv.sin_addr = *(struct in_addr*)host->h_addr;
	nRtn = connect(sockClt,(struct sockaddr*)&addrSrv,sizeof(struct sockaddr));
	if (nRtn != 0)
	{
		SendSystemInfo("与点播服务器连接失败!",0);
		return false;
	}
	nRtn = send(sockClt,sendMsg,sizeof(sendMsg),0);
	if (nRtn == SOCKET_ERROR)
	{
		SendSystemInfo("与点播服务器连接失败!",0);
		return false;
	}
	nRtn = recv(sockClt,sMsgRtn,sizeof(sMsgRtn),0);
	if (nRtn == SOCKET_ERROR)
	{
		SendSystemInfo("与点播服务器连接失败!",0);
		return false;
	}
	/////@@@@@@@@@@@@@以下为点播服务器中返回的信息
	sMsgRtn[99] = 0;

	////#######################################以下为绑定返回信息
	if (memcmp(sMsgRtn, "^^105", 5) == 0) //返回卡号正确信息
	{
		memset(sendMsg,0,100);
		memcpy(sendMsg,sMsgRtn,100);
		closesocket(sockClt);
		sockClt = INVALID_SOCKET;
		return true;
	}
	if (memcmp(sMsgRtn, "^^106", 5) == 0) //返回卡号错误信息
	{
		sTmpInfo = StrSmsCenterCode;
		SendMsgInfo(StrSmsCenterCode,MsgMobNo,"IC卡号码不存在!");//卡号错误
		sTmpInfo += MsgMobNo;
		sTmpInfo += "IC卡号码不存在!";
		SendSystemInfo(sTmpInfo,1);//*/
		memset(sendMsg,0,100);
		memcpy(sendMsg,sMsgRtn,100);
		closesocket(sockClt);
		sockClt = INVALID_SOCKET;
		return false;
	}
	if (memcmp(sMsgRtn, "^^111", 5) == 0) //绑定成功
	{
		sTmpInfo =StrSmsCenterCode;
		SendMsgInfo(StrSmsCenterCode,MsgMobNo,"电话点播业务绑定成功!");//绑定成功
		sTmpInfo += MsgMobNo;
		sTmpInfo += "绑定成功!";
		SendSystemInfo(sTmpInfo,1);
		memset(sendMsg,0,100);
		memcpy(sendMsg,sMsgRtn,100);
		closesocket(sockClt);
		sockClt = INVALID_SOCKET;
		return true;
	}
	if (memcmp(sMsgRtn, "^^112", 5) == 0) //此电话已绑定到其它卡号
	{
		sTmpInfo = StrSmsCenterCode;
		SendMsgInfo(StrSmsCenterCode,MsgMobNo,"此电话已绑定到其它IC卡号!");//此电话已绑定到其它卡号
		sTmpInfo += MsgMobNo;
		sTmpInfo += "此电话已绑定到其它卡号!";
		SendSystemInfo(sTmpInfo,1);
		memset(sendMsg,0,100);
		memcpy(sendMsg,sMsgRtn,100);
		closesocket(sockClt);
		sockClt = INVALID_SOCKET;
		return false;
	}
	if (memcmp(sMsgRtn, "^^113", 5) == 0) //绑定失败
	{
		sTmpInfo = StrSmsCenterCode;
		SendMsgInfo(StrSmsCenterCode,MsgMobNo,"电话点播业务绑定失败!");//卡绑定失败
		sTmpInfo += MsgMobNo;
		sTmpInfo += "绑定失败!";
		SendSystemInfo(sTmpInfo,1);
		memset(sendMsg,0,100);
		memcpy(sendMsg,sMsgRtn,100);
		closesocket(sockClt);
		sockClt = INVALID_SOCKET;
		return false;
	}
	////#######################################取消绑定所返回增加信息
	if (memcmp(sMsgRtn, "^^101", 5) == 0) //电话已绑定到卡号
	{
		memset(RequestIcCardNo,0,20);
		memcpy(RequestIcCardNo,sMsgRtn + 28,20);
		memset(sendMsg,0,100);
		memcpy(sendMsg,sMsgRtn,100);
		closesocket(sockClt);
		sockClt = INVALID_SOCKET;
		return true;
	}
	if (memcmp(sMsgRtn, "^^102", 5) == 0) //电话未绑定到任何卡号
	{
		sTmpInfo =StrSmsCenterCode;
		SendMsgInfo(StrSmsCenterCode,MsgMobNo,"电话未绑定到任何卡号!");
		sTmpInfo += MsgMobNo;
		sTmpInfo += "电话未绑定到任何卡号!";
		SendSystemInfo(sTmpInfo,1);
		memset(sendMsg,0,100);
		memcpy(sendMsg,sMsgRtn,100);
		closesocket(sockClt);
		sockClt = INVALID_SOCKET;
		return false;
	}
	if (memcmp(sMsgRtn, "^^103", 5) == 0) //取消绑定成功
	{
		sTmpInfo = StrSmsCenterCode;
		SendMsgInfo(StrSmsCenterCode,MsgMobNo,"电话点播业务取消成功!");
		sTmpInfo += MsgMobNo;
		sTmpInfo += "取消绑定成功!";
		SendSystemInfo(sTmpInfo,1);
		memset(sendMsg,0,100);
		memcpy(sendMsg,sMsgRtn,100);
		closesocket(sockClt);
		sockClt = INVALID_SOCKET;
		return true;
	}
	if (memcmp(sMsgRtn, "^^104", 5) == 0) //取消绑定失败
	{
		sTmpInfo = StrSmsCenterCode;
		SendMsgInfo(StrSmsCenterCode,MsgMobNo,"电话点播业务取消失败(电话未绑定点播业务或点播业务被锁定)!");
		sTmpInfo += MsgMobNo;
		sTmpInfo += "取消绑定失败(电话未绑定或被锁定)!";
		SendSystemInfo(sTmpInfo,1);
		memset(sendMsg,0,100);
		memcpy(sendMsg,sMsgRtn,100);
		closesocket(sockClt);
		sockClt = INVALID_SOCKET;
		return false;
	}
	////######################################/用户点播返回消息
	if (memcmp(sMsgRtn, "^^121", 5) == 0) //节目代号正确
	{
		memset(sendMsg,0,100);
		memcpy(sendMsg,sMsgRtn,100);
		closesocket(sockClt);
		sockClt = INVALID_SOCKET;
		return true;
	}
	if (memcmp(sMsgRtn, "^^122", 5) == 0) //节目代号错误
	{
		memset(sendMsg,0,100);
		memcpy(sendMsg,sMsgRtn,100);
		closesocket(sockClt);
		sockClt = INVALID_SOCKET;
		return false;
	}
	////##################////////////////用户点播确认返回消息
	if (memcmp(sMsgRtn, "^^141", 5) == 0) //点揪确认成功
	{
		sTmpInfo = StrSmsCenterCode;
		if (nTvodCostFlag == 0) //如果不是免费节目
			SendMsgInfo(StrSmsCenterCode,MsgMobNo,"短讯点播确认成功!");
		else //如果是免费节目
			SendMsgInfo(StrSmsCenterCode,MsgMobNo,"欢迎点播本节目!");
		sTmpInfo += MsgMobNo;
		sTmpInfo += "点播确认成功!";
		SendSystemInfo(sTmpInfo,1);
		memset(sendMsg,0,100);
		memcpy(sendMsg,sMsgRtn,100);
		closesocket(sockClt);
		sockClt = INVALID_SOCKET;
		return true;
	}
	if (memcmp(sMsgRtn, "^^142", 5) == 0) //点播确认失败
	{
		sTmpInfo = StrSmsCenterCode;
		if (nTvodCostFlag == 0) //如果不是免费节目
			SendMsgInfo(StrSmsCenterCode,MsgMobNo,"短讯点播确认失败!");
		else SendMsgInfo(StrSmsCenterCode,MsgMobNo,"免费节目确认失败!");
		sTmpInfo += MsgMobNo;
		sTmpInfo += "点播确认失败!";
		SendSystemInfo(sTmpInfo,1);
		memset(sendMsg,0,100);
		memcpy(sendMsg,sMsgRtn,100);
		closesocket(sockClt);
		sockClt = INVALID_SOCKET;
		return false;
	}
	if (memcmp(sMsgRtn, "^^161", 5) == 0) //取消点播节目成功
	{
		sTmpInfo = MsgMobNo;
		SendMsgInfo(StrSmsCenterCode,MsgMobNo,"取消点播节目成功!");
		sTmpInfo += "取消点播节目成功!";
		SendSystemInfo(sTmpInfo,1);
		memset(sendMsg,0,100);
		memcpy(sendMsg,sMsgRtn,100);
		closesocket(sockClt);
		sockClt = INVALID_SOCKET;
		return false;
	}
	if (memcmp(sMsgRtn, "^^162", 5) == 0) //取消点播节目失败
	{
		sTmpInfo = MsgMobNo;
		SendMsgInfo(StrSmsCenterCode,MsgMobNo,"取消点播节目失败!");
		sTmpInfo += "取消点播节目失败!";
		SendSystemInfo(sTmpInfo,1);
		memset(sendMsg,0,100);
		memcpy(sendMsg,sMsgRtn,100);
		closesocket(sockClt);
		sockClt = INVALID_SOCKET;
		return true;
	}
	return true;
}
//-------------------------用户确认点播
void UserTvodMovieValidate()
{
	memset(sendMsg,32,100);
	pMsg = sendMsg;
	memcpy(pMsg, "^^001", 5);///获取卡号
	pMsg += 5;
	memcpy(pMsg, MobilChannel, 3);
	pMsg += 3;
	
	memcpy(pMsg, MsgMobNo, 20);
	pMsg += 20;
	
	sendMsg[98] = '*';
	sendMsg[99] = '*';
	if (SendOrGetMsgFromServer()) 
	{
		memset(sendMsg,32,100);
		pMsg = sendMsg;
		memcpy(pMsg, "^^051", 5);
		pMsg += 5;
		memcpy(pMsg, MobilChannel, 3);
		pMsg += 3;
		
		memcpy(pMsg, MsgMobNo, 20);
		pMsg += 20;
		
		memcpy(pMsg, RequestIcCardNo, 20);
		pMsg += 20;
		
		memset(UserRequestMovieNo,0,20);
		memcpy(UserRequestMovieNo,"0",1);
		memcpy(pMsg, UserRequestMovieNo, 20);
		pMsg += 20;
		sendMsg[98] = '*';
		sendMsg[99] = '*';
		SendOrGetMsgFromServer();//验证节目编号
		if (memcmp(sMsgRtn, "^^133", 5) == 0) //在有播放节目的情况下进行确认
		{
			memset(UserRequestMovieNo,0,20);///获取卡号
			memcpy(UserRequestMovieNo,sMsgRtn + 48,20);

			memset(sendMsg,32,100);
			pMsg = sendMsg;
			memcpy(pMsg, "^^061", 5);
			pMsg += 5;
			memcpy(pMsg, MobilChannel, 3);
			pMsg += 3;
			
			memcpy(pMsg, MsgMobNo, 20);
			pMsg += 20;
			
			memcpy(pMsg, RequestIcCardNo, 20);
			pMsg += 20;
			
			memcpy(pMsg, UserRequestMovieNo,20);
			pMsg += 20;
			sendMsg[98] = '*';
			sendMsg[99] = '*';
			SendOrGetMsgFromServer();
		}
		else
		if (memcmp(sMsgRtn, "^^132", 5) == 0) //网络资源分配失败
		{
			SendMsgInfo(StrSmsCenterCode,MsgMobNo,"点播节目失败,请稍候点播!");//此电话已绑定到其它卡号
			memset(sendMsg,0,100);
			memcpy(sendMsg,sMsgRtn,100);
			closesocket(sockClt);
			sockClt = INVALID_SOCKET;
		}
	}
}
//-------------------------用户按节目编号点播

⌨️ 快捷键说明

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