??
當(dāng)SP端和ISMG端建立Connect連接后,我們就要開始發(fā)送短信了,而Submit操作的目的是SP在與ISMG建立應(yīng)用層連接后向ISMG提交短信。ISMG以Submit_Resp消息響應(yīng)。下面還是要看它的消息定義:
字段名 | 字節(jié)數(shù) | 屬性 | 描述 |
Msg_Id | 8 | Unsigned Integer | 信息標(biāo)識(shí)。 |
Pk_total | 1 | Unsigned Integer | 相同Msg_Id的信息總條數(shù),從1開始。 |
Pk_number | 1 | Unsigned Integer | 相同Msg_Id的信息序號(hào),從1開始。 |
Registered_Delivery | 1 | Unsigned Integer | 是否要求返回狀態(tài)確認(rèn)報(bào)告: 0:不需要; 1:需要。 |
Msg_level | 1 | Unsigned Integer | 信息級(jí)別。 |
Service_Id | 10 | Octet String | 業(yè)務(wù)標(biāo)識(shí),是數(shù)字、字母和符號(hào)的組合。 |
Fee_UserType | 1 | Unsigned Integer | 計(jì)費(fèi)用戶類型字段: 0:對(duì)目的終端MSISDN計(jì)費(fèi); 1:對(duì)源終端MSISDN計(jì)費(fèi); 2:對(duì)SP計(jì)費(fèi); 3:表示本字段無(wú)效,對(duì)誰(shuí)計(jì)費(fèi)參見(jiàn)Fee_terminal_Id字段。 |
Fee_terminal_Id | 32 | Octet String | 被計(jì)費(fèi)用戶的號(hào)碼,當(dāng)Fee_UserType為3時(shí)該值有效,當(dāng)Fee_UserType為0、1、2時(shí)該值無(wú)意義。 |
Fee_terminal_type | 1 | Unsigned Integer | 被計(jì)費(fèi)用戶的號(hào)碼類型,0:真實(shí)號(hào)碼;1:偽碼。 |
TP_pId | 1 | Unsigned Integer | GSM協(xié)議類型。詳細(xì)是解釋請(qǐng)參考GSM03.40中的9.2.3.9。 |
TP_udhi | 1 | Unsigned Integer | GSM協(xié)議類型。詳細(xì)是解釋請(qǐng)參考GSM03.40中的9.2.3.23,僅使用1位,右對(duì)齊。 |
Msg_Fmt | 1 | Unsigned Integer | 信息格式: 0:ASCII串; 3:短信寫卡操作; 4:二進(jìn)制信息; 8:UCS2編碼; 15:含GB漢字。。。。。。 |
Msg_src | 6 | Octet String | 信息內(nèi)容來(lái)源(SP_Id)。 |
FeeType | 2 | Octet String | 資費(fèi)類別: 01:對(duì)“計(jì)費(fèi)用戶號(hào)碼”免費(fèi); 02:對(duì)“計(jì)費(fèi)用戶號(hào)碼”按條計(jì)信息費(fèi); 03:對(duì)“計(jì)費(fèi)用戶號(hào)碼”按包月收取信息費(fèi)。 |
FeeCode | 6 | Octet String | 資費(fèi)(以分為單位)。 |
ValId_Time | 17 | Octet String | 存活有效期,格式遵循SMPP3.3協(xié)議。 |
At_Time | 17 | Octet String | 定時(shí)發(fā)送時(shí)間,格式遵循SMPP3.3協(xié)議。 |
Src_Id | 21 | Octet String | 源號(hào)碼。SP的服務(wù)代碼或前綴為服務(wù)代碼的長(zhǎng)號(hào)碼, 網(wǎng)關(guān)將該號(hào)碼完整的填到SMPP協(xié)議Submit_SM消息相應(yīng)的source_addr字段,該號(hào)碼最終在用戶手機(jī)上顯示為短消息的主叫號(hào)碼。 |
DestUsr_tl | 1 | Unsigned Integer | 接收信息的用戶數(shù)量(小于100個(gè)用戶)。 |
Dest_terminal_Id | 32*DestUsr_tl | Octet String | 接收短信的MSISDN號(hào)碼。 |
Dest_terminal_type | 1 | Unsigned Integer | 接收短信的用戶的號(hào)碼類型,0:真實(shí)號(hào)碼;1:偽碼。 |
Msg_Length | 1 | Unsigned Integer | 信息長(zhǎng)度(Msg_Fmt值為0時(shí):<160個(gè)字節(jié);其它<=140個(gè)字節(jié)),取值大于或等于0。 |
Msg_Content | Msg_length | Octet String | 信息內(nèi)容。 |
LinkID | 20 | Octet String | 點(diǎn)播業(yè)務(wù)使用的LinkID,非點(diǎn)播類業(yè)務(wù)的MT流程不使用該字段。 |
有上面的定義就可以寫出代碼了,如下:
void?Ccmpp_API::CmppSend(const?char?*tempMsgSrc,?const?char?*tempFeeType,?const?char?*tempFeeCode,?const?char?*tempSrcId,
?????????????????????????const?char?*tempDestTerminalId,?const?char?*tempMsgContent,const?char?*tempServiceId,
?????????????????????????char?tempPKTotal,?char?tempPKNumber,?char?tempRegisteredDelivery,char?tempMsgLevel,
?????????????????????????char?tempFeeUserType,char?tempTpPid,char?tempTpUdhi,char?tempMsgFmt,char?tempDstUsrTl)


{
????char?netBuffer[400];
????CMPP_SUBMIT?*?buffer;
????buffer?=?(CMPP_SUBMIT*)netBuffer;
????memset(buffer,?0,?400);

????buffer->nTotalLength?=?htonl(195?+?strlen(tempMsgContent));
????buffer->nCommandId?=?htonl(CMPP_SUBMIT_tag);
????
????if?(sequenceid?==?123456789i32)

????
{
???????sequenceid?=?1;
????}
????else

????
{
???????sequenceid++;
????}
????buffer->nSeqId?=?htonl(sequenceid);

????buffer->uchPkTotal?=?tempPKTotal;
????buffer->uchPkNumber?=?tempPKNumber;
????buffer->uchRegisteredDelivery?=?tempRegisteredDelivery;//目前不需要返回狀態(tài)確認(rèn)報(bào)告
????buffer->uchMsgLevel?=?tempMsgLevel;

????memcpy(buffer->sServiceId,?tempServiceId,?strlen(tempServiceId));
????buffer->uchFeeUserType?=?tempFeeUserType;
????memcpy(buffer->sFeeTerminalId,?"?",?0);//不知道此字段的意思,胡亂添的一個(gè)字段
????
????buffer->uchTpPid?=?tempTpPid;
????buffer->uchTpUdhi?=?tempTpUdhi;
????buffer->uchMsgFmt?=?tempMsgFmt;
????????
????memcpy(buffer->sMsgSrc,?tempMsgSrc,?strlen(tempMsgSrc));
????memcpy(buffer->sFeeType,?tempFeeType,?strlen(tempFeeType));
????memcpy(buffer->sFeeCode,?tempFeeCode,?strlen(tempFeeCode));
????memcpy(buffer->sValidTime,?"?",0);
????memcpy(buffer->sAtTime,?"?",?0);
????memcpy(buffer->sSrcId,?tempSrcId,?strlen(tempSrcId));
????buffer->uchDstUsrTl?=?tempDstUsrTl;
????buffer->uchMsgLength?=?strlen(tempMsgContent);
????memcpy(buffer->sDstTerminalId,?tempDestTerminalId,?strlen(tempDestTerminalId));
????memcpy(buffer->sMsgContent,?tempMsgContent,?strlen(tempMsgContent));

????//LinkId字段沒(méi)有填,此處是空,以后再添

????CmppSocket.Send(buffer,?195?+?strlen(tempMsgContent),?0);
????Sleep(100);
????return;
}? 目前這個(gè)代碼寫的還是很不好,這個(gè)軟件是我畢業(yè)后第一次所寫的代碼,所以很不規(guī)范,希望大家見(jiàn)諒!我一直想用STL把它再實(shí)現(xiàn)一遍,苦于現(xiàn)在沒(méi)有時(shí)間,等有時(shí)間一定寫完它!希望和在這方面有了解的朋友多交流。
?
posted on 2006-03-20 20:43
炙熱的太陽(yáng) 閱讀(1865)
評(píng)論(0) 編輯 收藏 引用