亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sgip_api_test.cpp

?? 中國聯通SGIP1.2短消息網關開發接口庫.rar
?? CPP
字號:
/**
*	說明:中國聯通SGIP1.2接口庫示例程序	
*	作者:PrinceToad
*	Email:princetoad@zealware.com
*	Http://www.zealware.com
*	版本:	1.0		2003/09/09
*			1.1		2003/11/08
*			1.11	2003/11/25 針對1.23版本作了更新.
*			1.12	2003/12/04 針對1.24版本作了更新.
*			1.2		2004/02/26 針對sgipapi 1.28版進行修改.
*			1.3		2004/03/07 針對sgipapi 1.3版進行修改(用戶可以自定義網關連接數).
*			1.31	2004/03/12 1.3沒能正確讀出配置文件的nodeid.
*			1.4		2004/07.19
*	示例程序介紹:
*	1.	程序會首先從配置文件中讀取相關的配置參數,如網關地址端口,本地監聽端口,用戶名口令,企業代碼,接入號等,
*	因此在啟動以前需要首先配置好這些參數,有關參數的說明在配置文件中有。
*	2.	程序在調用sgip.Start()函數后啟動,然后在后臺進行消息的收發。這時你可以調用sgip.Submit()
*	函數發送消息;系統在收到消息后會調用PDeliver()函數,PDeliver函數作為Deliver消息的處理函數在調用
*	Start函數是作為參數傳入。
*	3.	程序還演示了UCS2編碼的轉換,演示了在收到UCS2格式的MO消息是如何轉換成可以正常顯示的MultiByte編碼.
*/

#include "stdafx.h"

#include "sgip.h"

#pragma comment(lib, "sgip")

char	g_sSmgIp[20];		// 網關地址
int		g_nSmgPort;			// 網關端口號
char	g_sLocalIp[20];		// 本機地址
int		g_nLocalPort;		// 本地監聽端口
char	g_sUsername[20];	// 登錄名
char	g_sPwd[20];			// 登錄口令
char	g_sCorpId[20];		// 企業代碼
char	g_sNodeId[20];		// 源節點編號
char	g_sSpId[20];		// 接入號(特服號)
char	g_sServiceType[20];	// 業務代碼
char	g_sMsisdn[30];		// 測試用目的手機號
char	g_sMsgContent[160]; // 測試用消息內容
int		g_nConnCount;		// 網關連接數

CString g_szSettingPath;	//保存設置的文件路徑
CString	g_szCurPath;		//保存當前路徑


/**
*	從配置文件獲取配置參數(配置文件setting.ini,在當前目錄下)
*
*/
void  GetConfigValue()
{
	DWORD dwSize = 20;

	ZeroMemory(g_sSmgIp, 20);
	g_nSmgPort = 0;
	ZeroMemory(g_sLocalIp, 20);
	g_nLocalPort = 0;
	ZeroMemory(g_sUsername, 20);
	ZeroMemory(g_sPwd, 20);
	ZeroMemory(g_sCorpId, 20);
	ZeroMemory(g_sNodeId, 20);
	ZeroMemory(g_sSpId, 20);
	ZeroMemory(g_sMsisdn, 30);
	ZeroMemory(g_sMsgContent, 160);
	ZeroMemory(g_sServiceType, 20);
	g_nConnCount = 0;

	//獲取當前路徑
	CString szCurPath("");
	GetModuleFileName(NULL,szCurPath.GetBuffer(MAX_PATH),MAX_PATH);	
	szCurPath.ReleaseBuffer();
	g_szCurPath = szCurPath.Left(szCurPath.ReverseFind('\\') + 1);

	//設置文件在當前路徑下 
	g_szSettingPath = g_szCurPath + "setting.ini";

	// 讀取配置
	GetPrivateProfileString("setting", "smgip", "Not found",
		g_sSmgIp, dwSize, g_szSettingPath);

	g_nSmgPort = GetPrivateProfileInt("setting", "smgport", 0, g_szSettingPath);

	GetPrivateProfileString("setting", "localip", "Not found",
		g_sLocalIp, dwSize, g_szSettingPath);

	g_nLocalPort = GetPrivateProfileInt("setting", "localport", 0, g_szSettingPath);

	GetPrivateProfileString("setting", "username", "Not found",
		g_sUsername, dwSize, g_szSettingPath);

	GetPrivateProfileString("setting", "pwd", "Not found",
		g_sPwd, dwSize, g_szSettingPath);
	
	GetPrivateProfileString("setting", "corpid", "Not found",
		g_sCorpId, dwSize, g_szSettingPath);
	
	GetPrivateProfileString("setting", "nodeid", "Not found",
		g_sNodeId, dwSize, g_szSettingPath);
	
	GetPrivateProfileString("setting", "spid", "Not found",
		g_sSpId, dwSize, g_szSettingPath);
	
	GetPrivateProfileString("setting", "destid", "Not found",
		g_sMsisdn, 30, g_szSettingPath);

	GetPrivateProfileString("setting", "msgcontent", "Not found",
		g_sMsgContent, 160, g_szSettingPath);

	GetPrivateProfileString("setting", "servicetype", "Not found",
		g_sServiceType, dwSize, g_szSettingPath);

	g_nConnCount = GetPrivateProfileInt("setting", "smgconn", 3, g_szSettingPath);
}

// 輸出程序的描述信息
void OutProgramInfo()
{
	printf("\n*****************************************************************************\n");
	printf("**軟件名稱 - <<中國聯通SGIP1.2短消息網關開發接口庫>> V1.4例程.\n");
	printf("**作者主頁 - http://www.zealware.com\n");
	printf("**電子郵件 - Email:princetoad@zealware.com\n");
	printf("**MSN	   - princetoad2003@hotmail.com\n");
	printf("**OICQ	   - 50506711\n");
	printf("**聯系電話 - 010-13901168061\n");
	printf("**授權方式 - Used Free,SourceCode On Sale.\n");
	printf("**********************Published By PrinceToad Jun.19.04.*********************\n\n");
}

// 構造一條主動下發的免費消息包(相關字段從配置文件中獲取,例如企業代碼,接入號,目的手機號,和測試消息內容).
void SetSubmit(sgipg_submit *ss)
{
	//SPNumber(SP接入號-21)
	strcpy(ss->sSpNumber, g_sSpId);
	//ChargeNumber(付費號碼-21,全零表示由SP付費)
	strcpy(ss->sChargeNumber, "000000000000000000000");
	//UserCount(1)
	ss->cUserCount = 1;
	//UserNumber(接收消息的電話號碼-21)
	strcpy(ss->sUserNumber, g_sMsisdn);
	//企業代碼(0-99999 5)
	strcpy(ss->sCorpId, g_sCorpId);
	//業務代碼(10)
	strcpy(ss->sServiceType, g_sServiceType);
	//付費類型(1,"1"表示免費)
	ss->cFeeType = 1;
	//Feevalue(6,10表示2分,可以填空)
	//strncpy(ss->sFeeValue, "10");
	//Givenvalue(6,一般填空)
	//AgentFlag(1,一般為0)
	ss->cAgentFlag = 0;
	//Mtflag(1,一般填2,表示是由非MO消息引起的MT消息)
	ss->cMorelatetoMTFlag = 2;
	//priority(1,0-9.0默認)
	//Expiretime,scheduleTime(16,16,可以為空)
	//Reportflag(1)
	ss->cReportFlag = 1;
	//tppid,tpudhi(1,1 "0", "0")
	//MsgCoding(1,"15")
	ss->cMessageCoding = 15;	// 能夠顯示中英文.
	//msgtype(1,"0")

	//024A3A694DA5B99D099585D5D1E404000CA8C2CC2EC49B4000
	//content1[0]=0x06; content1[1]=0x05; content1[2]=0x04; content1[3]=0x15; content1[4]=0x81; content1[5]=0x15; content1[6]=0x81
	char pchRingContent[] = "0x02 0x4A 0x3A 0x69 0x4D 0xA5 0xB9 0x9D 0x09 0x95 0x85 0xD5 0xD1 0xE4 0x04 0x00 0x0C 0xA8 0xC2 0xCC 0x2E 0xC4 0x9B 0x40 0x00";
//	strcpy((char*)ss->sMsgContent, g_sMsgContent);

	// 轉換整數(長度)為網絡字節序
//	ss->nMsgLen = ntohl(strlen(g_sMsgContent));
	ss->sMsgContent[0] = 0x06;
	ss->sMsgContent[1] = 0x05;
	ss->sMsgContent[2] = 0x04;
	ss->sMsgContent[3] = 0x15;
	ss->sMsgContent[4] = 0x81;
	ss->sMsgContent[5] = 0x15;
	ss->sMsgContent[6] = 0x81;

	char* pchMsgContent = (char*)ss->sMsgContent;
	memcpy(pchMsgContent + 7, pchRingContent, sizeof(pchRingContent));
	
	ss->nMsgLen = htonl(7 + sizeof(pchRingContent));
	
	return;
}

void PDeliver(DeliverStr  deliver);

void PReport(ReportStr report);

void PResponse(MTRespStr  response);

void PMTError(MTErrorStr mterror);

/**
*	處理Deliver消息的函數
*/
void PDeliver(DeliverStr  deliver) {
	// Edit with V1.28(打印出MO上行消息的LinkId,這里的LinkId可以不作修改的賦值給對應的MT消息)
	// 打印出MO消息的相關字段,包括MO消息的內容.
	char  sMultiByte[141];
	ZeroMemory(&sMultiByte, 141);
	unsigned char uchTmp = 0;
	unsigned char pchTmp[1024];
	ZeroMemory(pchTmp, 1024);

//	如果是UCS2編碼的話,首先需要轉換成MultiByte格式,才能正常顯示。	
	if (deliver.cMsgCoding == 8) {
		memcpy(pchTmp, deliver.sMsgContent, deliver.nMsgLen);
		// 高低字節轉換
		for (int ix=0; ix<deliver.nMsgLen/2; ix++) {
			uchTmp = pchTmp[ix*2];				// 低
			pchTmp[ix*2] = pchTmp[ix*2 + 1];	// 低 = 高
			pchTmp[ix*2 + 1] = uchTmp;			// 高 = 低
		}
		// 轉換成MultiByte形式.
		int nRet = WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, (LPCWSTR)pchTmp, deliver.nMsgLen/2, sMultiByte, 140, NULL, NULL);	

		// 重新給消息包的長度和內容賦值.
		deliver.nMsgLen = nRet;
		ZeroMemory(deliver.sMsgContent, 160);
		memcpy(deliver.sMsgContent, sMultiByte, nRet);
	}

	// 輸出編碼方式
	CString str(_T(""));

	switch((int)deliver.cMsgCoding) {
	case 0:
		str = "ASCII編碼";
		break;
	case 4:
		str = "二進制編碼";
		break;
	case 8:
		str = "UCS2編碼";
		break;
	case 15:
		str = "GBK編碼";
		break;
	default:
		str.Format("未知-<%d>", deliver.cMsgCoding);
	}

	printf("Deliver, SeqId = <%u>, MsgLen = <%u>, MsgFmt = <%s>, MsgContent = <%s>, LinkId = <%s>.\n", \
		deliver.nSeq, deliver.nMsgLen, str, deliver.sMsgContent, deliver.sLinkId);
	
	return;
}

/**
*	處理Report消息的函數
*/
void PReport(ReportStr report){
	printf("Report, SubmitSeqId = <%u>, SubmitDateTime = <%u>, sUserNumber = <%s>, State = <%d>, ErrorCode = <%d>.\n", \
		report.nSubmitSeq, report.nSubmitDateTime, report.sUserNumber, report.cState, report.cErrcode);
	return;
}

/**
*	處理SubmitResponse消息的函數
*	(V1.23版本及以后可以返回完整的SUBMIT消息內容,通過MTResponse中的sgipg_submit ss字段)
*/
void PResponse(MTRespStr  response){
	printf("MTResponse, SeqId = <%u>, ChargeNumber = <%s>, Result = <%d>.\n", \
		response.nSeq, response.ss.sChargeNumber, response.cResult);
	return;
}

/**
*	處理MT失敗的函數
*	(V1.23版本及以后可以返回完整的SUBMIT消息內容,通過MTResponse中的sgipg_submit ss字段)
*/
void PMTError(MTErrorStr mterror){
	printf("MTError.Errcode = <%d>\n", mterror.nErrorType);
	return;
}

// 演示sgip.dll用法的main函數.
int main(int argc, char* argv[])
{
	OutProgramInfo();

	CSgip sgip;			//定義一個Csgip對象

	sgipg_submit	ss;	//定義一個Submit數據包
	ZeroMemory(&ss, sizeof(sgipg_submit));

	GetConfigValue();	// 取得配置參數

	//啟動系統(sgip.dll V1.3 使用戶可以自定義同網關的連接數)
	if (0 != sgip.Start(g_sLocalIp, g_nLocalPort, g_sSmgIp, \
		g_nSmgPort, g_sUsername, g_sPwd, \
		1, g_sNodeId, PDeliver, \
		PReport, PResponse, PMTError, g_nConnCount, true) ) {
		
		MessageBox(NULL, "初始化失敗.", "提示", MB_ICONERROR);
		goto finished;
	}

	SetSubmit(&ss);		// 用于構造submit消息包的函數

//通過調用函數AddUserNumber增加群發功能.(要測試群發的話把下面這句注釋去掉就行)
//	sgip.AddUserNumber(&ss, "8613023456789,8613312345670-8613312345699,8613012345678");

// 向網關提交submit消息包(在這里連續發送三次,只是測試用)
// nSeq,nDateTime都是輸出參數。
	int ix;
	unsigned int nSeq, nDateTime;
	for (ix=0; ix<200000; ix++) {
		TRACE("%d\n", sgip.GetSubmitSeqId());

//**GetSubmitSeqId()函數的作用是提前獲得下一條Submit消息的序列號,有些用戶有這樣的需求.(一般用不著.)
//		printf("提前獲得Submit消息的序列號:%d.\n", sgip.GetSubmitSeqId());

//********************************************************************************************
//**
//**需要注意的是:sgip.Submit函數只是把submit消息提交給后臺,由后臺程序提交給網關,
//**因此在這里沒法判斷消息是否發送成功,需要通過PResponse或PMTError,和PReport來判斷,
//**提交失敗的話,會觸發PMTError函數;提交成功的話,會觸發PResponse函數;成功到達用戶手機的話,
//**會觸發PReport函數(當請求需要狀態報告時.)其中,PMTError和PResponse函數均會返回完整的submit
//**消息包的內容(通過其輸入參數mterror或response中的sgipg_submit ss字段,有些開發者可能用得到).
//**(V1.23 及以后版本支持.)
//********************************************************************************************
		sgip.Submit(ss, nSeq, nDateTime);
		printf("Submit sequence:<%u>, datetime:<%u>\n", nSeq, nDateTime);
		
//		Sleep(1);
	}

//主程序暫停,系統自動在后臺運行,進行短消息的收發處理操作。
	system("pause");

finished:
//退出系統前進行系統清理工作
	sgip.Release();
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日本韩国一区二区三区视频| 99精品黄色片免费大全| 亚洲另类在线制服丝袜| 久久精品一区二区三区不卡牛牛 | 中文字幕在线视频一区| 日本一区二区视频在线| 国产欧美精品一区二区三区四区| 国产欧美日韩精品一区| 国产精品福利影院| 亚洲综合激情网| 日韩精品亚洲专区| 久久国产成人午夜av影院| 黑人巨大精品欧美一区| www.日韩大片| 精品视频999| 欧美哺乳videos| 欧美精彩视频一区二区三区| 综合电影一区二区三区| 午夜亚洲福利老司机| 国内精品国产成人国产三级粉色 | 国产精品视频线看| 亚洲伦理在线精品| 青青草视频一区| 国产传媒日韩欧美成人| 在线观看成人免费视频| 日韩视频中午一区| 国产成人免费视频一区| 99亚偷拍自图区亚洲| 精品人伦一区二区色婷婷| 久久精品人人做人人爽97| 日韩伦理电影网| 奇米一区二区三区av| 成人一区在线观看| 欧美日韩精品久久久| 国产日韩影视精品| 五月婷婷欧美视频| 北条麻妃国产九九精品视频| 8x8x8国产精品| 国产精品日韩成人| 久久99九九99精品| 色狠狠av一区二区三区| 久久天天做天天爱综合色| 亚洲综合视频在线观看| 福利一区二区在线| 欧美一区二区播放| 亚洲国产综合91精品麻豆| 国产一区二区在线观看视频| 欧美日韩午夜在线| 中文字幕亚洲成人| 国产成人精品影视| 精品三级av在线| 亚洲成人午夜电影| 一本一道综合狠狠老| 欧美韩日一区二区三区四区| 麻豆精品精品国产自在97香蕉| 91麻豆成人久久精品二区三区| xvideos.蜜桃一区二区| 丝袜亚洲另类丝袜在线| 欧美视频日韩视频| 亚洲美女少妇撒尿| 99国产欧美久久久精品| 国产午夜精品一区二区| 国产乱码精品一区二区三区忘忧草 | 99国产精品一区| 国产欧美在线观看一区| 激情文学综合丁香| 欧美mv日韩mv国产网站app| 亚洲成人av电影在线| 在线欧美日韩精品| 亚洲男人的天堂在线aⅴ视频| 成人网页在线观看| 国产精品理伦片| 99精品欧美一区二区三区小说| 国产精品午夜电影| 成人午夜伦理影院| 中文字幕av资源一区| 成人国产电影网| 亚洲欧洲日产国码二区| 成人av资源在线观看| 亚洲色图制服丝袜| 欧美在线免费播放| 午夜精品成人在线| 日韩欧美国产麻豆| 国产精品一二三| 国产精品少妇自拍| 欧美中文一区二区三区| 天使萌一区二区三区免费观看| 欧美喷潮久久久xxxxx| 日韩av网站免费在线| 精品电影一区二区三区| 国产91精品欧美| 一区二区三区 在线观看视频| 欧美日韩一区二区三区不卡| 日本美女视频一区二区| 久久久.com| 一本色道久久加勒比精品| 亚洲高清三级视频| 欧美精品一区二区在线播放| 高清不卡一区二区| 亚洲成人综合在线| 久久亚洲精华国产精华液| 99久久婷婷国产| 日韩电影在线一区| 国产三级精品三级| 欧美三级在线播放| 国产精品一区三区| 亚洲在线免费播放| 久久婷婷国产综合国色天香| 91麻豆产精品久久久久久| 麻豆精品久久久| 亚洲免费观看高清完整版在线| 欧美精品一卡两卡| 成人avav影音| 蜜臀久久99精品久久久久久9 | 色先锋资源久久综合| 热久久一区二区| 综合激情成人伊人| 久久亚洲精华国产精华液| 欧美亚日韩国产aⅴ精品中极品| 国产精品一区在线观看乱码| 亚洲一区电影777| 亚洲国产精品黑人久久久| 91精品国产手机| 欧美综合欧美视频| 成人激情免费视频| 久草精品在线观看| 青青草视频一区| 亚洲va国产天堂va久久en| 中文字幕在线一区免费| 久久综合丝袜日本网| 777午夜精品视频在线播放| 日本乱人伦aⅴ精品| 成人免费视频caoporn| 美女网站视频久久| 亚洲成国产人片在线观看| 亚洲美腿欧美偷拍| 国产精品色一区二区三区| 精品国产91乱码一区二区三区 | 666欧美在线视频| 在线视频一区二区三| 成人av电影免费观看| 粉嫩欧美一区二区三区高清影视| 美国av一区二区| 麻豆精品一区二区综合av| 天天操天天干天天综合网| 夜夜揉揉日日人人青青一国产精品| 国产精品欧美经典| 欧美国产日韩亚洲一区| 欧美激情一区不卡| 国产精品久久久久一区二区三区 | 欧美专区日韩专区| 色综合久久中文综合久久牛| a级精品国产片在线观看| 成人高清伦理免费影院在线观看| 国产98色在线|日韩| 国产乱码精品1区2区3区| 国产高清在线精品| 懂色一区二区三区免费观看| 成人v精品蜜桃久久一区| 成人av小说网| 色老综合老女人久久久| 欧美日韩激情一区二区| 欧美一区二区三区在线观看视频| 欧美一级爆毛片| 国产亚洲欧美一级| 国产精品美女一区二区三区| 亚洲免费在线视频一区 二区| 综合中文字幕亚洲| 亚洲夂夂婷婷色拍ww47| 日韩中文字幕一区二区三区| 久久99热国产| av亚洲精华国产精华| 欧美亚洲综合色| 欧美不卡123| 国产精品国产三级国产| 亚洲成人福利片| 国内外成人在线视频| av亚洲精华国产精华精华| 欧美调教femdomvk| www国产成人| 亚洲人一二三区| 麻豆精品一区二区av白丝在线| 成人性生交大片免费| 欧美日韩视频一区二区| 欧美精品一区二区三区四区| 国产精品久久久久久久久快鸭| 一个色妞综合视频在线观看| 久久成人久久鬼色| 91蝌蚪国产九色| 久久影院电视剧免费观看| 国产精品久久二区二区| 日本欧美肥老太交大片| 99久久精品一区二区| 日韩免费成人网| 一区二区三区在线观看欧美 | 亚洲图片欧美激情| 精品一区二区成人精品| 欧洲亚洲国产日韩| 国产精品午夜久久| 国产中文字幕一区|