免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
基于TCP協(xié)議的短信數(shù)據(jù)包打包與解包及應(yīng)用 - capter的專欄
基于TCP協(xié)議的短信數(shù)據(jù)包打包與解包及應(yīng)用
孟培遠 05-09-16 11:30
首先是CMPPClient.cpp中執(zhí)行主函數(shù)main(),調(diào)用bool CMPPClientStart(),首先綁定套接字cmpp.bind(),然后連接數(shù)據(jù)庫,循環(huán)判斷是否有信息要發(fā)送,如果有信息發(fā)送,則提交要發(fā)送的信息iRet = cmpp.SubmitSM(),判斷提交的結(jié)果,分別進行處理,更新數(shù)據(jù)庫中短信發(fā)送狀態(tài), 接收從短信中心來的數(shù)據(jù)iStatus = cmpp.RecvDataFromSMC(lCommandId, osRecvData),根據(jù)接收的狀態(tài)進行判斷處理,如果狀態(tài)為MSG_SUCCESS,則進行判斷各種命令,并進行處理,如果命令為CMPP_DELIVER,則進行iRet = cmpp.DeliverSM(),判斷結(jié)果,并根據(jù)結(jié)果進行相應(yīng)的處理
這個部分主要是短信的接收與發(fā)送,分別在兩個不同進程中實現(xiàn)3888中為:cmcc.cpp和recv.cpp,其實發(fā)送與接收的程序基本相同,主要是接收recv.cpp中把發(fā)送的代碼屏蔽了.
在02166中是CMPPClient.cpp發(fā)送與接收代碼同在一個進程中進行運行.
下面主要就02166的代碼進行說明:

 


CMPP.cpp的主要功能是,對數(shù)據(jù)打包解包以及各種數(shù)據(jù)的更改進行封裝到具體函數(shù)內(nèi),CMPP.cpp主要是調(diào)用CMPPduCode.cppSocket.cpp里面的函數(shù)進行數(shù)據(jù)的打包,解包,發(fā)送與接收.
CMPP.cpp的主要函數(shù)及功能說明如下:
制作連接數(shù)據(jù)包
MakeConnectPDU(char* p_pSystemID, char* p_pPasswd, Octstr& p_OctStr)
(調(diào)用m_PduCode.Pdu_Encode_Connect(PDUConnect, p_OctStr);進行連接數(shù)據(jù)打包)
制作發(fā)送信息數(shù)據(jù)包
MakeSmsSendPDU( char  p_cPkTotal,char  p_cPkNumber,char  p_cRegisteredDelivery,
char  p_cMsgLevel,char* p_pServiceId,char  p_cFeeUserType,char* p_pFeeTerminalId,
char  p_cFeeTerminalType,char  p_cTPpid,char  p_cTPudhi,       char  p_cMsgFmt,
char* p_pMsg_src,       char* p_pFeeType, char* p_pFeeCode, char* p_pValidTime,
char* p_pAtTime,  char* p_pSrcId,char* p_pDestTerminalId,char  p_cDestTerminalType,
char  p_cMsgLength,char* p_pMsgContent,char* p_pLinkID,Octstr& p_OctStr)
(調(diào)用m_PduCode.Pdu_Encode_Submit(PduSubmitSm, p_OctStr); 提交信息打包)
制作接收回應(yīng)數(shù)據(jù)包
MakeDeliverRespPDU(long p_lSeqNum,char* p_pMsgId,long p_cResult, Octstr& p_OctStr)
(調(diào)用m_PduCode.Pdu_Encode_Deliver_Resp(p_lSeqNum, PDUDeliverResp, p_OctStr);信息打包)
制作測試數(shù)據(jù)包
MakeActiveTestPDU(Octstr& p_OctStr)
(調(diào)用m_PduCode.Pdu_Encode_ActiveTest(p_OctStr);進行數(shù)據(jù)打包)
制作測試回應(yīng)數(shù)據(jù)包
MakeActiveTestRespPDU(long p_lSeqNum, Octstr& p_OctStr)
(調(diào)用m_PduCode.Pdu_Encode_ActiveTest_Resp(p_lSeqNum, p_OctStr);進行數(shù)據(jù)打包)
制作終止數(shù)據(jù)包
MakeTerminatePDU(Octstr& p_OctStr)
(調(diào)用m_PduCode.Pdu_Encode_Terminate(p_OctStr);)
制作終止回應(yīng)數(shù)據(jù)包
MakeTerminateRespPDU(long p_lSeqNum, Octstr& p_OctStr)
(調(diào)用m_PduCode.Pdu_Encode_Terminate_Resp(p_lSeqNum, p_OctStr);進行數(shù)據(jù)打包)
綁定
Bind(string& p_strHost, int p_iPort, string& p_strSystemID, string& p_strPasswd)
(調(diào)用ReBind())
根據(jù)已保存的參數(shù),重新綁定到短訊中心
ReBind()
(調(diào)用MakeConnectPDU((char*)m_strSystemID.c_str(), (char*)m_strPasswd.c_str(), osSendData);進行數(shù)據(jù)打包,然后發(fā)送信息進行測試是否連接)
釋放與短訊中心的綁定
UnBind()
(調(diào)用m_socket.Close();進行斷開套接字)
發(fā)送短消息
(1) SubmitSM(long& p_lSeqNum, cmpp_pdu_submit_sm& p_PduSubmit)
(調(diào)用(3) SubmitSM() )
發(fā)送短消息
(2) SubmitSM(long& p_lSeqNum,int  p_iPkTotal,int  p_iPkNumber,int  p_iRegisteredDelivery,
int  p_iMsgLevel,string p_strServiceId,int  p_iFeeUserType,string p_strFeeTerminalId,
int  p_iFeeTerminalType, //(3.0中添加字段) int  p_iTPpid,int  p_iTPudhi,int  p_iMsgFmt,
string p_strMsgSrc,       string p_strFeeType,string p_strFeeCode,string p_strValidTime,
string p_strAtTime,       string p_strSrcId,string p_strDestTerminalId, int  p_iDestTerminalType, //(3.0中添加字段)int  p_iMsgLength,string p_strMsgContentHex,string p_strLinkID)
(調(diào)用(1) SubmitSM())
發(fā)送短消息
(3) SubmitSM(long& p_lSeqNum,char p_cPkTotal,char p_cPkNumber,char p_cRegisteredDelivery,
char  p_cMsgLevel,char* p_pServiceId,char  p_cFeeUserType,char* p_pFeeTerminalId,
char  p_cFeeTerminalType,char  p_cTPpid,char  p_cTPudhi,       char  p_cMsgFmt,       char* p_pMsg_src,char* p_pFeeType,char* p_pFeeCode,char* p_pValidTime,char* p_pAtTime,
char* p_pSrcId,char* p_pDestTerminalId, char  p_cDestTerminalType,   //(3.0中添加字段)
char  p_cMsgLength,char* p_pMsgContent,char* p_pLinkID)    //(3.0中添加字段)
(調(diào)用MakeSmsSendPDU( p_cPkTotal,       p_cPkNumber, p_cRegisteredDelivery, p_cMsgLevel,
p_pServiceId, p_cFeeUserType, p_pFeeTerminalId,    p_cFeeTerminalType, p_cTPpid,
p_cTPudhi, p_cMsgFmt, p_pMsg_src, p_pFeeType,  p_pFeeCode, p_pValidTime, p_pAtTime, p_pSrcId,     p_pDestTerminalId, p_cDestTerminalType, p_cMsgLength, p_pMsgContent,
p_pLinkID, osSendData);對要發(fā)送的數(shù)據(jù)進行打包,然后m_socket.Send((char*)osSendData.data, osSendData.len);發(fā)送數(shù)據(jù),再調(diào)用m_socket.Receive((char*)osRecvData.data, osRecvData.len);接收發(fā)送后的返回信息,調(diào)用 iResult = m_PduCode.Pdu_Decode_Submit_Resp(osRecvData, PduHead, PduSubmitResp);對接收到的數(shù)據(jù)進行解包,返回解包成功與否的信息)
提交短信回復(fù)信息(提交完信息后回復(fù)過來的信息,進行解包)
SubmitSMResp(string& p_strMsgIdHex,Octstr& p_OctStr) 
(調(diào)用m_PduCode.Pdu_Decode_Submit_Resp(p_OctStr, PduHead, PduSubmitResp);進行數(shù)據(jù)解包)
接收短信中心下發(fā)數(shù)據(jù)
RecvDataFromSMC(long& p_lCommandId, Octstr& p_osRecvData)
(調(diào)用m_socket.Receive((char*)p_osRecvData.data, p_osRecvData.len);接收數(shù)據(jù),調(diào)用m_PduCode.Pdu_Decode_Command(p_osRecvData);進行數(shù)據(jù)解包)
接收從短信中心發(fā)送過來或者從其他網(wǎng)關(guān)轉(zhuǎn)發(fā)過來的短信傳給SP
(1)DeliverSM( Octstr& p_OctStr,long& p_lSeqNum,string& p_pMsgIdHex,string& p_pDestId,
string& p_pServiceId,int& p_TPpid,int& p_TPudhi,int& p_MsgFmt, string& p_pSrcTerminalId,
int& p_SrcTerminalType, //(3.0中添加字段)int& p_RegisteredDelivery,int& p_MsgLength,
string& p_pMsgContentHex, string& p_pLinkID) //(3.0中添加字段)
(調(diào)用(2)DeliverSM(p_OctStr, p_lSeqNum, szMsgId, szDestId, szServiceId, cTPpid, cTPudhi,
cMsgFmt, szSrcTerminalId, cSrcTerminalType,cRegisteredDelivery, cMsgLength,szMsgContent, szLinkID);進行數(shù)據(jù)賦值)
對接收到數(shù)據(jù)是短信下發(fā)進行解包處理
(2) DeliverSM(       Octstr& p_OctStr,long& p_lSeqNum,char* p_pMsgId,      char* p_pDestId,
char* p_pServiceId,char& p_TPpid,char& p_TPudhi,char& p_MsgFmt,char* p_pSrcTerminalId,
char& p_SrcTerminalType,  //(3.0中添加字段)char& p_RegisteredDelivery,
char& p_MsgLength,char* p_pMsgContent,       char* p_pLinkID)//(3.0中添加字段)
(調(diào)用MakeDeliverRespPDU(PduHead.sequence_id, (char*)PduDeliver.Msg_Id, cResult, osSendData);進行數(shù)據(jù)接收, m_socket.Send((char*)osSendData.data, osSendData.len);發(fā)送信息到短信中心)
活動測試(活動測試要求(10~15秒)就需發(fā)送測試)
ActiveTest()//動態(tài)測試
(調(diào)用MakeActiveTestPDU(osSendData);進行數(shù)據(jù)打包m_socket.Send((char*)osSendData.data, osSendData.len);發(fā)送數(shù)據(jù)包, m_socket.Receive((char*)osRecvData.data, osRecvData.len);接收數(shù)據(jù)包, m_PduCode.Pdu_Decode_ActiveTest_Resp(osRecvData, PduHead);接收到的數(shù)據(jù)包進行解包)
對接收到數(shù)據(jù)是活動測試進行解包處理
ActiveTestResp(Octstr& p_OctStr)
(調(diào)用m_PduCode.Pdu_Decode_ActiveTest(p_OctStr, PduHead)進行數(shù)據(jù)解包MakeActiveTestRespPDU(PduHead.sequence_id, osSendData);對是數(shù)據(jù)進行打包m_socket.Send((char*)osSendData.data, osSendData.len); 發(fā)送數(shù)據(jù)到短訊中心)
請求拆除連接
Terminate()
(調(diào)用MakeTerminatePDU(osSendData);進行請求斷開的數(shù)據(jù)進行打包, m_socket.Send((char*)osSendData.data, osSendData.len); 發(fā)送數(shù)據(jù)到短訊中心m_socket.Receive((char*)osRecvData.data, osRecvData.len);從短信中心接收數(shù)據(jù)包, m_PduCode.Pdu_Decode_Terminate_Resp(osRecvData, PduHead);對接收到的數(shù)據(jù)進行解包)
對接收到數(shù)據(jù)是請求拆除連接進行解包處理
TerminateResp(Octstr& p_OctStr)
(調(diào)用m_PduCode.Pdu_Decode_Terminate(p_OctStr, PduHead)進行數(shù)據(jù)解包, MakeTerminateRespPDU(PduHead.sequence_id, osSendData);對回應(yīng)的數(shù)據(jù)進行打包m_socket.Send((char*)osSendData.data, osSendData.len);把回應(yīng)的數(shù)據(jù)發(fā)送到短信中心)
 
 
在Socket.cpp中用到的主要是Send(),Receive()兩個函數(shù),分別用來發(fā)送數(shù)據(jù)和接受數(shù)據(jù)
具體函數(shù)如下:
連接函數(shù)
Connect(const string& p_strHost, int p_iPort)
發(fā)送函數(shù)
(1)    Send(const char *p_pchBuf, int p_iLen, unsigned int p_iFlag)
發(fā)送函數(shù)
(2)    Send(const string& p_strInfo, unsigned int p_iFlag)
發(fā)送(1)與發(fā)送(2)不同之處在于沒有發(fā)送信息的長度
 
接收函數(shù)
(1)    Receive(char *p_pchBuf, int p_iLen, unsigned int p_iFlag)
接收函數(shù)
(2)    Receive(string& p_strInfo, unsigned int p_iFlag)
接收(1)與接收(2)不同之處在于沒有接受信息的長度
而在CMPPduCode.cpp中則是打包和解包的詳細操作:
包頭解碼(整型數(shù)據(jù)轉(zhuǎn)主機字節(jié)序)//網(wǎng)絡(luò)字節(jié)轉(zhuǎn)化為主機字節(jié)
pdu_header_decode(cmpp_pdu_head& p_PduHead)
包頭編碼(整型數(shù)據(jù)轉(zhuǎn)網(wǎng)絡(luò)字節(jié)序)//主機字節(jié)轉(zhuǎn)化為網(wǎng)絡(luò)字節(jié)
pdu_header_encode(cmpp_pdu_head& p_PduHead)
解包獲取命令
Pdu_Decode_Command(Octstr& p_OctData)
連接到短信中心數(shù)據(jù)打包  //連接到短信中心的數(shù)據(jù)進行打包
Pdu_Encode_Connect(const cmpp_pdu_connect& p_PduConnect, Octstr& p_OctStr)
連接到短信中心返回數(shù)據(jù)解包
Pdu_Decode_Connect_Resp(const Octstr& p_OctData, cmpp_pdu_head& p_PduHead, cmpp_pdu_connect_resp& p_PduConnectResp)
發(fā)送短信數(shù)據(jù)打包
Pdu_Encode_Submit(const cmpp_pdu_submit_sm& p_PduSubmit, Octstr& p_OctStr)
發(fā)送短信返回數(shù)據(jù)解包
Pdu_Decode_Submit_Resp(const Octstr& p_OctData, cmpp_pdu_head& p_PduHead, cmpp_pdu_submit_sm_resp& p_PduSubmitResp)
接收短信返回數(shù)據(jù)解包(CMPP_DELIVER是ISMG把從短信中心或其他ISMG轉(zhuǎn)發(fā)來的短信交給SP
Pdu_Decode_Deliver(const Octstr& p_OctData, cmpp_pdu_head& p_PduHead, cmpp_pdu_deliver_sm& p_PduDeliver)
接收短信后要返回信息,進行數(shù)據(jù)打包
Pdu_Encode_Deliver_Resp(long p_lSeqNum, const cmpp_pdu_deliver_sm_resp& p_PduDeliverResp, Octstr& p_OctStr)
活動測試數(shù)據(jù)打包(SP --> ISMG 或 ISMG --> SP
Pdu_Encode_ActiveTest(Octstr& p_OctStr)
活動測試數(shù)據(jù)解包
Pdu_Decode_ActiveTest(const Octstr& p_OctStr, cmpp_pdu_head& p_PduHead)
活動測試返回數(shù)據(jù)解包
Pdu_Decode_ActiveTest_Resp(const Octstr& p_OctStr, cmpp_pdu_head& p_PduHead)
活動測試返回數(shù)據(jù)打包
Pdu_Encode_ActiveTest_Resp(long lSeqNum, Octstr& p_OctStr)
請求拆除連接數(shù)據(jù)打包
Pdu_Encode_Terminate(Octstr& p_OctStr)//只有包頭,沒有包體
請求拆除連接數(shù)據(jù)解包
Pdu_Decode_Terminate(const Octstr& p_OctStr, cmpp_pdu_head& p_PduHead)
請求拆除連接返回數(shù)據(jù)解包
Pdu_Decode_Terminate_Resp(const Octstr& p_OctStr, cmpp_pdu_head& p_PduHead)
請求拆除連接返回數(shù)據(jù)打包
Pdu_Encode_Terminate_Resp(long lSeqNum, Octstr& p_OctStr)
 
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
X.Y.E.A.H .net平臺手機管理軟件開發(fā)
網(wǎng)絡(luò)游戲制作技術(shù)(二)—— 消息打包處理部分
(八)高性能服務(wù)器架構(gòu)設(shè)計總結(jié)1——以flamigo服務(wù)器代碼為例
(原創(chuàng))C++11改進我們的程序之簡化我們的程序(七)
Python字節(jié)流打包拆包
PDU編碼
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服