青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

春暖花開
雪化了,花開了,春天來了
posts - 149,comments - 125,trackbacks - 0
 

最近在工作中遇到一個(gè)比較怪異的現(xiàn)象,在某些省區(qū)與SP的短信交互存在問題,短信發(fā)送不出去。查了一下原因:SmsSendMessage參數(shù)設(shè)置的問題。

Windows Mobile 5.0SDKHelloSMS例子中,發(fā)送短信的代碼是這樣寫的

void SendSMS(BOOL bSendConfirmation, BOOL bUseDefaultSMSC, LPCTSTR lpszSMSC, LPCTSTR lpszRecipient, LPCTSTR lpszMessage)
{
    SMS_HANDLE smshHandle;
    SMS_ADDRESS smsaSource;
    SMS_ADDRESS smsaDestination;
    TEXT_PROVIDER_SPECIFIC_DATA tpsd;
    SMS_MESSAGE_ID smsmidMessageID;

    
// try to open an SMS Handle
    if(FAILED(SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, &smshHandle, NULL)))
    
{
        MessageBox(NULL,
                    (LPCTSTR)LoadString(ghInstance, IDS_ERROR_SMSOPEN, 
00), 
                    (LPCTSTR)LoadString(ghInstance, IDS_CAPTION_ERROR, 
00),
                    MB_OK 
| MB_ICONERROR);
        
return;
    }


    
// Create the source address
    if(!bUseDefaultSMSC)
    
{
        smsaSource.smsatAddressType 
= SMSAT_INTERNATIONAL;
        _tcsncpy(smsaSource.ptsAddress, lpszSMSC, SMS_MAX_ADDRESS_LENGTH);
    }


    
// Create the destination address
    smsaDestination.smsatAddressType = SMSAT_INTERNATIONAL;
    _tcsncpy(smsaDestination.ptsAddress, lpszRecipient, SMS_MAX_ADDRESS_LENGTH);

    
// Set up provider specific data
    memset(&tpsd, 0sizeof(tpsd));
    tpsd.dwMessageOptions 
= bSendConfirmation ? PS_MESSAGE_OPTION_STATUSREPORT : PS_MESSAGE_OPTION_NONE;
    tpsd.psMessageClass 
= PS_MESSAGE_CLASS1;
    tpsd.psReplaceOption 
= PSRO_NONE;
    tpsd.dwHeaderDataSize 
= 0;

    
// Send the message, indicating success or failure
    if(SUCCEEDED(SmsSendMessage(smshHandle, ((bUseDefaultSMSC) ? NULL : &smsaSource), 
                                 
&smsaDestination, NULL, (PBYTE) lpszMessage, 
                                 _tcslen(lpszMessage) 
* sizeof(TCHAR), (PBYTE) &tpsd, 
                                 
sizeof(TEXT_PROVIDER_SPECIFIC_DATA), SMSDE_OPTIMAL, 
                                 SMS_OPTION_DELIVERY_NONE, 
&smsmidMessageID)))
    
{
        MessageBox(NULL,
                    (LPCTSTR)LoadString(ghInstance, IDS_SMSSENT, 
00), 
                    (LPCTSTR)LoadString(ghInstance, IDS_CAPTION_SUCCESS, 
00),
                    MB_OK);
    }

    
else
    
{
        MessageBox(NULL,
                    (LPCTSTR)LoadString(ghInstance, IDS_ERROR_SMSSEND, 
00), 
                    (LPCTSTR)LoadString(ghInstance, IDS_CAPTION_ERROR, 
00),
                    MB_OK 
| MB_ICONERROR);
    }


    
// clean up
    VERIFY(SUCCEEDED(SmsClose(smshHandle)));
}


這段代碼在一般情況下是運(yùn)行正確的,對(duì)于手機(jī)與手機(jī)的發(fā)送是不存在問題的,但是與SP的交互在某些省區(qū)就存在短信發(fā)送不出去的情況。

為了更好的理解這段代碼,我們先來熟悉一下SmsSendMessage及各個(gè)參數(shù)。

SmsSendMessage

功能Use the SmsSendMessage function to create and send an Short Message Service (SMS) message.(創(chuàng)建和發(fā)送短信,但短信發(fā)送后并不保存到發(fā)件箱中)

原型

HRESULT SmsSendMessage (

const SMS_HANDLE smshHandle, // 調(diào)用SmsOpen時(shí)獲得的短信句柄

const SMS_ADDRESS * const psmsaSMSCAddress, //指向短信中心號(hào)碼的地址

const SMS_ADDRESS * const psmsaDestinationAddress, // 發(fā)送的目的地址

const SYSTEMTIME * const pstValidityPeriod, // 發(fā)送時(shí)間的有效期

const BYTE * const pbData, // 信息的內(nèi)容部分

const DWORD dwDataSize,// 信息內(nèi)容的長度

const BYTE * const pbProviderSpecificData, //運(yùn)營商的附加數(shù)據(jù)

const DWORD dwProviderSpecificDataSize, // 附加數(shù)據(jù)的長度

const SMS_DATA_ENCODING smsdeDataEncoding, // 短信編碼

const DWORD dwOptions, // 其他選項(xiàng)

SMS_MESSAGE_ID * psmsmidMessageID); // 用于得到系統(tǒng)回執(zhí)的信息

(具體介紹可查看http://msdn.microsoft.com/en-us/library/aa455068.aspx

在實(shí)際應(yīng)用中短信發(fā)送不出去,但是SmsSendMessage的返回值是S_OK值。在一些文章中有人這樣認(rèn)為是短信編碼的問題造成的。

如果編碼格式不對(duì)可能造成短信中心網(wǎng)關(guān)把短信給吞掉的情況,程序雖然調(diào)用成功,但是就是目標(biāo)號(hào)碼收不到短信。函數(shù)參數(shù)中的后三個(gè)參數(shù)可以不用或設(shè)默認(rèn)值都可以。

起初我也是認(rèn)為這個(gè)地方造成的,很是興奮。短信的回復(fù)內(nèi)容恰為字母,我誤以為短信內(nèi)容此時(shí)是7-BIT的短消息,短信網(wǎng)關(guān)把短信給吞掉了,造成目標(biāo)號(hào)碼收不到短信。在練習(xí)中卻也陰差陽錯(cuò)的成功了。很高興的把理由歸到了這個(gè)地方。并這樣總結(jié):SmsSendMessage可以支持7-bitASCII碼的短消息,也支持16-bitunicode的短消息。但內(nèi)容為ASCII的時(shí)候,短信編碼為 SMSDE_GSMSMSDE_OPTIMAL,當(dāng)內(nèi)容不全是ASCII的時(shí)候,短信編碼為SMSDE_GSMSMSDE_OPTIMAL。所以回復(fù)內(nèi)容改為漢字即可。

但是這樣對(duì)么?起初我認(rèn)為我的解釋很合理.但是我卻發(fā)現(xiàn)我的一個(gè)參數(shù)與原來的程序不一樣.

是我在嘗試中無意修改了一個(gè)參數(shù),

tpsd.psMessageClass = PS_MESSAGE_CLASS1;

修改為了

tpsd.psMessageClass = PS_MESSAGE_CLASSUNSPECIFIED;

這是發(fā)送短信中的運(yùn)營商的指定數(shù)據(jù)TEXT_PROVIDER_SPECIFIC_DATA,它的參數(shù)psMessageClass是指

Text Short Message Service (SMS) messages with the appropriate flag can replace previously received notifications with a similar flag and originating address.

它有以下五個(gè)值:

PS_MESSAGE_CLASS0: The message should be displayed immediately but not stored. The MS shall send an acknowledgement to the service center when the message has successfully reached the MS. (被接受后立即顯示但不存儲(chǔ)(稱為閃信)。需要向SMSC發(fā)送確認(rèn)信息。)

PS_MESSAGE_CLASS1The message should be stored and an acknowledgement should be sent to the Service Center when it is stored.(接收后被存儲(chǔ),一旦存儲(chǔ),需要向SMSC發(fā)送確認(rèn)信息。)

PS_MESSAGE_CLASS2The message should be transferred to the SMS data field in the subscriber identity module (SIM) before an acknowledgement is sent to the Service Center.

PS_MESSAGE_CLASS3When the message has successfully reached the destination and can be stored, an acknowledgement is sent to the Service Center.

PS_MESSAGE_CLASSUNSPECIFIEDThe message Class is not set in the outgoing or incoming message. (對(duì)發(fā)出或收到的短信不進(jìn)行設(shè)置)

 

分析以上五個(gè)值,前四個(gè)值有一個(gè)共同的特點(diǎn),都需要向SMSC發(fā)送確認(rèn)。而最后一個(gè)值沒有設(shè)定。

這個(gè)值的改動(dòng),解決了我所遇到的問題。但究其原因,我有些想不通為什么?
    但是在實(shí)際應(yīng)用中,出現(xiàn)了
tmail.exe的異常。不知道是這個(gè)值的變動(dòng)帶來的問題,還是實(shí)際模塊中存在的問題。還需要繼續(xù)研究一下。

如果大家有知道的,給些建議哈.

posted on 2009-03-10 14:14 Sandy 閱讀(6851) 評(píng)論(13)  編輯 收藏 引用 所屬分類: windows學(xué)習(xí)

FeedBack:
# re: Windows Mobile 發(fā)送短信的問題
2009-03-10 15:26 | Herb
建議看一下短信協(xié)議smpp  回復(fù)  更多評(píng)論
  
# re: Windows Mobile 發(fā)送短信的問題
2009-03-16 17:08 | science
建議不要直接用api,用mapi(就是操作win mobile短信的一套接口)建一條短信放在發(fā)件箱里,然后submitmessage,讓手機(jī)自己去發(fā)送。  回復(fù)  更多評(píng)論
  
# re: Windows Mobile 發(fā)送短信的問題
2009-04-14 22:21 | 飛飄飄
你好,請(qǐng)問你用過wm6的SDK嗎?在這種情況下,運(yùn)行這個(gè)程序就會(huì)有異常,實(shí)在不知道為什么,期待你的解答!謝謝  回復(fù)  更多評(píng)論
  
# re: Windows Mobile 發(fā)送短信的問題
2009-04-15 10:09 | Sandy
@飛飄飄
你好,我今天還專門試了一下wm6中HelloSMS的那個(gè)例子,沒有異常啊!
WM5和WM6中兩個(gè)例子的代碼基本上是相同的。

在這種情況下,是不是指將PS_MESSAGE_CLASS1替換成PS_MESSAGE_CLASSUNSPECIFIED。

我分別在模擬器和真機(jī)上試驗(yàn)過,似乎也沒有什么異常,所以還請(qǐng)賜教。

  回復(fù)  更多評(píng)論
  
# re: Windows Mobile 發(fā)送短信的問題
2009-04-18 21:45 | 飛飄飄
你好!今天我剛找到原因,我之前是在classic模擬器進(jìn)行模擬,而這個(gè)程序不能用classic模擬器,而要在professional模擬器上調(diào)試,因?yàn)樵赾lassic模擬器沒有radio模塊,只有接收功能不能進(jìn)行發(fā)送,所以出現(xiàn)了異常.我是剛?cè)腴T,想請(qǐng)教一下應(yīng)該如何把這個(gè)程序下載到真機(jī)上進(jìn)行試驗(yàn)?zāi)?謝謝 !  回復(fù)  更多評(píng)論
  
# re: Windows Mobile 發(fā)送短信的問題
2009-04-20 09:37 | Sandy

@飛飄飄
在真機(jī)上運(yùn)行需要安裝同步軟件,如果你是xp系統(tǒng)的話,安裝Active Sync同步軟件, 在調(diào)試的時(shí)候,選擇相應(yīng)平臺(tái)的device; 如果是vista系統(tǒng)的話,安裝Microsoft Windows Mobile 設(shè)備中心6.1,即drvupdate-x86.exe.

如果只是簡單的試驗(yàn)一下這個(gè)程序的話,安裝同步軟件后,只需把那個(gè)exe文件拷貝到手機(jī)上,點(diǎn)擊該文件即可.  回復(fù)  更多評(píng)論
  
# re: Windows Mobile 發(fā)送短信的問題
2009-04-20 21:01 | 飛飄飄
恩,謝謝指點(diǎn)!
  回復(fù)  更多評(píng)論
  
# re: Windows Mobile 發(fā)送短信的問題
2009-05-05 11:17 | qingyuzhui
@Sandy
可是我用WM6.0運(yùn)行 SmsSendMessage 返回值不對(duì)啊?什么原因啊
  回復(fù)  更多評(píng)論
  
# re: Windows Mobile 發(fā)送短信的問題
2009-05-05 12:44 | Sandy
@qingyuzhui

這個(gè)我建議你看一下SDK。里面有一些對(duì)返回值的說明。

這里我對(duì)SmsSendMessage說明一下它的返回值,

如果SmsSendMessage執(zhí)行成功的話,它會(huì)返回S_OK ,表示該方法成功執(zhí)行。
如果返回的值為E_INVALIDARG, E_OUTOFMEMORY, E_UNEXPECTED, and E_FAIL,或者為其他,可以查看一下SMS Specific Errors 和 SMS General Errors。

如果你覺得不是很明白的話,可以給我發(fā)郵件:qiyanhd@163.com

  回復(fù)  更多評(píng)論
  
# re: Windows Mobile 發(fā)送短信的問題
2009-06-05 15:33 | beautymind
你好我現(xiàn)在做短信管理軟件 要將已發(fā)送短信里邊的特殊短信移到我自己建的一個(gè)MenuItem下邊 需要做哪些判斷 用哪個(gè)接口可以實(shí)現(xiàn)!
我做的Mobile 5  回復(fù)  更多評(píng)論
  
# re: Windows Mobile 發(fā)送短信的問題
2009-06-08 11:15 | Sandy
@beautymind
hi, 你說的是不是將發(fā)送的特殊短信移到自己建的目錄下,這個(gè)我還真的沒有嘗試過.
不過理論上是不是可以這樣去想,按照短信存儲(chǔ)的相關(guān)信息,將其存儲(chǔ)到數(shù)據(jù)庫中,這樣,我們自己就可以查看相應(yīng)的短信信息,而不在系統(tǒng)的收件箱里面出現(xiàn).
如果還原回去的話,就把記錄的相關(guān)信息插入到系統(tǒng)的文件夾里.

這是我自己的理解.  回復(fù)  更多評(píng)論
  
# re: Windows Mobile 發(fā)送短信的問題
2011-05-17 16:15 | futetan
兄臺(tái),太感謝你了,引你的觀點(diǎn)做了下修改,接收到的信息格式正確了。  回復(fù)  更多評(píng)論
  
# re: Windows Mobile 發(fā)送短信的問題
2011-12-19 16:01 | 受益者
很多時(shí)候[PS_MESSAGE_CLASS1替換成PS_MESSAGE_CLASSUNSPECIFIED]好像關(guān)系不大,主要是
smsaDestination.smsatAddressType = SMSAT_INTERNATIONAL;
時(shí)手機(jī)號(hào)前加[86]國家代碼,或設(shè)為SMSAT_NATIONAL。
  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久亚洲精品伦理| 亚洲一区二区三| 国产欧美一区二区三区另类精品| 久久久久天天天天| 亚洲一区美女视频在线观看免费| 欧美激情视频在线播放| 久久久久久久久蜜桃| 亚洲视频精品在线| 亚洲精品欧美日韩专区| 黄色成人在线观看| 国产欧美一区二区精品婷婷| 欧美日韩卡一卡二| 欧美+日本+国产+在线a∨观看| 校园春色综合网| 亚洲少妇在线| 日韩一级二级三级| 91久久精品久久国产性色也91 | 欧美在线免费观看亚洲| 一本在线高清不卡dvd| 亚洲国产精品一区制服丝袜| 国内精品久久久久影院薰衣草| 国产精品国产自产拍高清av王其| 欧美女同在线视频| 欧美福利一区二区| 免费视频一区| 免费观看成人| 欧美成人福利视频| 欧美成人嫩草网站| 欧美大片一区二区| 欧美大片在线观看| 欧美成人中文字幕| 蜜臀av国产精品久久久久| 久久免费午夜影院| 久久一区二区三区四区五区| 久久久99精品免费观看不卡| 欧美一区亚洲二区| 欧美中文在线观看国产| 欧美综合国产精品久久丁香| 欧美专区日韩专区| 久久精品国产在热久久| 久久久久久穴| 久久综合久久综合久久| 欧美99在线视频观看| 欧美电影免费| 欧美日韩亚洲一区在线观看| 欧美日韩综合在线| 国产精品日韩| 国产亚洲一区二区三区| 在线播放亚洲| 亚洲精一区二区三区| 一本久久综合亚洲鲁鲁| 亚洲综合欧美| 久久久91精品国产一区二区精品| 久久先锋资源| 亚洲国产日韩美| 亚洲精品一二三区| 亚洲一区二区三区四区视频| 欧美在线观看一区二区| 卡一卡二国产精品| 欧美日韩国产综合视频在线观看| 欧美性猛片xxxx免费看久爱| 国产亚洲欧美日韩精品| 在线精品福利| 在线亚洲+欧美+日本专区| 香蕉免费一区二区三区在线观看| 久久影音先锋| 亚洲精品国产欧美| 欧美亚洲免费| 欧美二区视频| 国产伦精品一区二区三区| 一区二区三区在线免费观看 | 久久精品三级| 亚洲黄色三级| 亚洲在线电影| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美三级欧美一级| 国内精品久久久久久久影视麻豆 | 久久国产主播精品| 欧美经典一区二区三区| 国产精品视频在线观看| 在线观看一区二区视频| 亚洲一区二区在线看| 久久这里有精品15一区二区三区| 亚洲人体影院| 久久九九99| 国产精品红桃| 91久久精品美女高潮| 欧美亚洲系列| 亚洲精品一二区| 久久精选视频| 国产精品一区二区三区四区| 亚洲精品一区二区三区不| 久久久久久久性| 妖精成人www高清在线观看| 久久色中文字幕| 国产美女高潮久久白浆| 一区二区免费在线视频| 美女诱惑一区| 午夜久久久久久久久久一区二区| 欧美乱大交xxxxx| 在线免费一区三区| 欧美与欧洲交xxxx免费观看| 日韩视频在线播放| 蜜桃精品久久久久久久免费影院| 国产欧美亚洲日本| 亚洲自拍电影| 日韩视频免费在线| 欧美大片在线观看| 在线观看av不卡| 久久九九99| 性欧美xxxx大乳国产app| 国产精品vvv| 这里是久久伊人| 亚洲国产欧美日韩另类综合| 久久亚洲视频| 精品成人一区二区三区四区| 久久精品国产99精品国产亚洲性色 | 欧美视频在线看| 亚洲人成7777| 欧美大片一区二区| 久久躁狠狠躁夜夜爽| 精品成人一区二区三区| 久久久精品国产99久久精品芒果| 亚洲自拍电影| 国产精品一区二区在线| 午夜精品999| 亚洲午夜视频| 国产精品亚洲综合色区韩国| 亚洲欧美久久| 亚洲欧美国产不卡| 国产精品一区视频网站| 欧美亚洲在线播放| 午夜精品视频| 国产一区免费视频| 玖玖玖国产精品| 狂野欧美激情性xxxx| 亚洲黄色性网站| 亚洲激情电影中文字幕| 欧美久久成人| 在线亚洲欧美| 亚洲一级片在线观看| 国产日韩精品久久| 久久一区二区三区av| 美女视频黄免费的久久| 亚洲美女视频网| 一区二区欧美视频| 国产女主播一区二区| 久久精品人人爽| 毛片一区二区三区| 日韩天堂在线观看| 一区二区三区免费网站| 国产欧美日韩视频| 米奇777在线欧美播放| 美女久久一区| 中文av字幕一区| 午夜精品久久久久影视| 在线观看视频日韩| 亚洲国产精品一区二区www| 欧美日韩一二三四五区| 午夜性色一区二区三区免费视频 | 亚洲国产精品毛片| 日韩视频在线一区| 国产欧美一区二区精品秋霞影院| 免费观看在线综合| 欧美日韩在线免费观看| 久久精品国产亚洲一区二区三区| 久久人人看视频| 亚洲午夜国产成人av电影男同| 亚洲一区二区影院| 亚洲国产99| 亚洲一区二区少妇| **网站欧美大片在线观看| 亚洲精品综合久久中文字幕| 国产视频久久久久久久| 亚洲成人在线网| 国产精品一二三| 亚洲第一网站| 国产精品最新自拍| 亚洲国产精品精华液2区45| 国产精品久久二区| 欧美黑人在线播放| 国产精品一区免费观看| 亚洲国产精品久久久久秋霞蜜臀| 国产精品卡一卡二| 亚洲福利视频免费观看| 国产日本欧美一区二区三区| 亚洲国产欧美国产综合一区 | 欧美成黄导航| 国产精品久久久久毛片大屁完整版 | 亚洲免费电影在线| 欧美在线免费| 亚洲网站啪啪| 欧美成人午夜激情在线| 欧美一区三区二区在线观看| 欧美精品国产一区二区| 毛片精品免费在线观看| 国产精品视频成人| 亚洲精品在线免费| 亚洲成色777777在线观看影院| 亚洲欧美日本日韩|