亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

在CMPP2.0 協議SP端的.NET開發

2019-11-18 12:02:19
字體:
來源:轉載
供稿:網友

  一、CMPP協議簡介
  中國移動通信互聯網短信網關接口協議(China Mobile Peer to Peer CMPP),是中國移動夢網內部各SMS參與節點相互交換SMS的官方協議。作為夢網的參與方,移動夢網的增值服務商(Service PRovider SP )要按照此協議規范實現SP的部分,才可以將自己的短信通過移動的GSM網絡的數據通道傳輸到最終手機用戶上。
  
  實際上,協議規范了3個方面的內容:
  
  SP與移動的互聯網短信網關(Internet Short Message Gateway,ISMG)之間的接口協議
  
  ISMG之間的接口協議(譬如移動各省、市之間的短信息交換通過ISMG之間進行)
  
  ISMG與匯接網關(Gateway Name Server GNS,類似互聯網上的DNS服務器)之間的接口協議,譬如跨省之類的短信需要GNS的幫助指出當前ISMG該如何傳遞短信。
  
  其中,后二方面屬于移動短信息系統內部實現,對于SP來講大概可以“透明”來看待,只要實現了SP同ISMG的正確交互,就可以實現接入移動夢網短信系統。我們關心的只是SP端的開發細節。
  
  二、CMPP交互模式
  從手機用戶角度講,按短信的發起/接收路徑來講,有兩個叫法:
  
  MT(Short Message Mobile Terminated, SMMT),短信接收,短信從SP發送到手機用戶。
  
  MO (Short Message Mobile Originate,SMMO),短信發送,短信從手機用戶端發送到目標SP。
  
  這兩類短信交互,從SP端來看,都是屬于Socket傳輸應用,CMPP的協議是以TCP/ip協議作為底層承載協議的,屬于TCP/IP協議棧之上的應用。
  
  SP同ISMG的交互連接分長連接和短連接。
  
  所謂短連接,就是一次連接,傳輸一個消息,然后等待回復后拆除連接,顯然,效率很低,所以,基本上不被考慮(實際應用移動也不答應SP采用短連接,只是不明白移動為什么還要寫入文檔? ISMG間會需要?)
  
  所謂長連接,就是SP建立同ISMG連接,然后不斷將數據包(一個個CMPP消息)發送到ISMG,此處發送不必等待某條消息的ISMG回應消息返回,就接著發送下一個消息。同時,等待ISMG返回信息或者等待ISMG發送給SP的消息。發送同接收消息不是一定要同步的,實際采用異步(同時也時雙工)模式。從效率上,顯然,必須全雙工的異步模式才能夠滿足實際應用需求。
   在CMPP2.0 協議SP端的.NET開發(圖一)
  三、SP端開發
  1.消息分類
  
  首先,圖中的CMPP消息有很多種,SP同ISMG之間交流這些消息。大體上這些消息發出后,對方往往需要回復一個應答(RESP)類消息。注重,這些消息大多具有方向性,也就是說只能夠從一端到另一端,而不可反方向進行,有些(少數)則可兩端都能夠發出。以下信息主要來源于移動的文檔,但針對大家易混淆或源文檔解釋不夠具體做了明確和補充。具體見下表:
   在CMPP2.0 協議SP端的.NET開發(圖二)
  2.交互階段
  
  整個CMPP協議交互分為驗證、事務兩個階段。驗證階段,發送CMPP_CONNECTION消息進行驗證,通過驗證后(必須要通過才)進入CMPP事務階段,可以發送短信數據了。上表中的CMPP_CONNECTION以下的消息都屬于事務階段的消息。
  
  3.消息數據結構
  
  每一個消息包含 消息頭 和 消息體兩個部分,頭固定長度為12字節,其他消息長度各異,但是同一類型消息的長度是固定的。所有消息的各個字段基本上僅有3種類型:Unsigned Integer (無符號整型) 、Integer(整型)、Octet String(字符串),每種類型具體長度不定,網絡字節順序。
  
  1、消息頭(3個Unsigned Integer字段組成):
  
  4字節的Total_Length (Unsigned Integer),包含了此消息的總計(包括了頭部分)長度。
  
  4字節的Command_Id(Unsigned Integer),指明了此消息到底是什么消息,就是上表中消息的枚舉值。應用程序根據此值確定本數據包到底是什么消息,從而可以按照確定的消息類型,解析余下的消息體。
  
  4字節的Sequence_Id(Unsigned Integer),指明了此數據包在發送此消息端的唯一編號。這個唯一編號,實際上可以看作流水操作編號。因為分析到交互模式我們看到,SP發送數據到ISMG,不是每發送一個就停下來等待ISMG的回復,而是“一下子”發送多個數據包過去,然后等待ISMG的回應。然而,怎么知道回應的消息是到底對應之前發送過去的消息中的那一條呢?本字段就是解決此難題。SP按照編號發送消息過去,等待ISMG的回應—一般情形下回應消息數據結構都有表明本消息回應的是SP發出的哪一條消息,這個對應就是依靠Sequence_Id。它并不要求一定要嚴格唯一,但是在給定的一段時間內,必須唯一(基本上只要SP發送過去的消息中沒有重復就行了)。假如是需要SP回答的消息,SP也必須將ISMG發送過來的消息的Sequence_Id填入相應字段,表明這是某個消息的回應。SP端和ISMG端Sequence_ID都沒有確定具體的算法。SP可以(但不推薦)采用數據庫的唯一Id作為此值。
  
  2、消息體。消息體長度根據消息不同,長度不一。其他的參考移動的文檔《中國移動通信互聯網短信網關接口協議(China Mobile Peer to Peer, CMPP)(V2.0)》,這里著重講講2個重要消息的消息體數據結構:
  
  CMPP-_SUBMIT的消息體:
   在CMPP2.0 協議SP端的.NET開發(圖三)
  CMPP_SUBMIT消息長度是可變的,將SP端的消息發送給ISMG,ISMG將返回一個MSGID給SP標示此消息,之后(48小時以內,但一般最多幾分鐘內就可),ISMG返回關于此消息的遞送報告。遞送報告同MO短消息是通過另外一個重要消息CMPP-_DELIVER來提交給SP的:
  
  CMPP-_DELIVER的各個字段:
   在CMPP2.0 協議SP端的.NET開發(圖四)
  假如是報告,那么Msg_Content將按照狀態報告結構來解釋:
   在CMPP2.0 協議SP端的.NET開發(圖五)
  關于State字段,如下解釋:
  在CMPP2.0 協議SP端的.NET開發(圖六)
  4.安全驗證
  
  CMPP協議在CMPP_CONNECT中傳遞驗證消息。驗證消息為9字節的0+移動給出的密碼+當前時間戳字節數組的md5算法后的字節。時間戳為 月日時分秒,10位。代碼算法如下:
  
  private byte[] getMd5Code()
  
  {
  
  byte[] buf=new byte[6+9+_PassWord.Length+10] ;
  
  byte[] s_a=Encoding.ASCII.GetBytes(_SystemID); //就是企業代碼
  
  byte[] s_0={0,0,0,0,0,0,0,0,0};   //9字節的0,此處當作右補0
  
  byte[] s_p=Encoding.ASCII.GetBytes(_Password); //密碼
  
  this._timestamp =getTimestamp();  //取得認證碼時賦值字符串
  
  byte[] s_t=Encoding.ASCII.GetBytes(_timestamp); //10位字符串字節數組
  
  s_a.CopyTo(buf,0);
  
  s_0.CopyTo(buf,6);
  
  s_p.CopyTo(buf,6+9);
  
  s_t.CopyTo(buf,6+9+_Password.Length);
  
  MD5 md5= new MD5CryptoServiceProvider(); //創建MD5類別
  
  return(md5.ComputeHash(buf,0,buf.Length));
  
  }
  
  其中getTimestamp函數為返回例如“0710125959”(7月10號12點59分59秒)這樣的字符串,具體代碼略過,有愛好請查看本文的附件代碼。
  
  5.廠商API問題
  
  筆者公司所處廣東,廣東移動提供了華為的以C 形式的API(SMEIDLL.dll),來幫助大家初期熟悉CMPP協議。但是,經過開發測試,發現華為的API至少存在幾個問題:
  
  1、封裝成幾個API函數,但是由于CMPP自身的復雜性,導致這些函數丑陋無比,參數多,而且難以明晰含義。華為的API,內部將CMPP的驗證、事務階段分成幾個函數實現,其中將發送SMS到ISMG功能以函數提供,竟然出現SubmitAExExEx之類的函數說明。
  
  2、CMPP的交互是異步的,需要多線程實現一邊發送,一邊接收反饋信息。此API應當是內部維護一個線程進行CMPP_SUBMIT消息發送,但是華為API卻通過空循環之類的操作等待ISMG返回CMPP_SUBMIT_RESP得到相應的MSGID再返回(從而實現消息同步返回)。經過測試,大約需要200毫秒,這個在實際SP的高性能需求場合根本無法滿足系統要求。
  
  3、接收短信必須依靠程序主動先發出函數HasDeliverMessage調用 ,得到有消息才可通過GetDeliverSMEx函數獲取消息,顯然,這種方式是低效率的,而且輕易產生消息數據包丟失,表現為有些MO消息,SP接收不到。而且,令人迷惑的是,你還不能夠新開一個線程專門來做判定并接收MO的動作,實際開發中一旦采用線程來做就回發生內存保護錯誤(大概屬于同API自身的線程有沖突)。
  
  4、返回錯誤碼,往往又是華為自己定的一套錯誤碼(大概華為設計此API為了適應SMGP CMPP等多個協議),而且經常變動,很是傷腦筋。
  
  基于以上理由,我認為自己按照CMPP協議開發一個SP端程序,比較能夠滿足一般SP的需求。
  
  四、C#實現
  1、CMPP協議實現類CMPPClient
  
  通過研究,筆者用C#寫了一組類實現自己的CMPP SP端程序(CMPPClient)。為了實現相關類,還需要編寫一些輔助類,并且首先要解決CMPP協議的數據結構同C#的數據之間的轉換問題。
  
  CMPP的Octet String 實際上相當于C#中的byte[],所有CMPP消息的Octet String字段出了CMPP_SUBMIT和CMPP_DELIVER的msg_content字段外,其他的都可以認為是ASCII編碼,所以全部可以采用System.Text.Encoding.ASCII進行編碼和解碼;對于Msg_Content字段,由于一般情況下存在漢字信息傳輸.,所以默認的編/解碼應該為Encoding.Default,實際是什么編碼還要考察MSG_Fmt字

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美三级免费观看| 欧美尤物巨大精品爽| 欧美一级免费看| 亚洲视频axxx| 亚洲欧美日韩天堂一区二区| 久久久日本电影| 亚洲精品一区久久久久久| 亚洲精品日韩欧美| 欧美又大粗又爽又黄大片视频| 日韩免费观看网站| 日韩在线资源网| www.亚洲男人天堂| 国产精品美女www爽爽爽视频| 欧美猛交ⅹxxx乱大交视频| 91高清视频免费| 疯狂蹂躏欧美一区二区精品| 久久久久久久久亚洲| 国产视频精品va久久久久久| 久久久精品一区| 亚洲激情电影中文字幕| 精品中文字幕视频| 一区二区三区日韩在线| www.亚洲一二| 伊人精品在线观看| 精品爽片免费看久久| 亚洲一区二区三区毛片| 色诱女教师一区二区三区| 欧美午夜影院在线视频| 国产一区二区视频在线观看| 亚洲黄色www网站| 欧美韩日一区二区| 亚洲成人精品视频在线观看| 欧美寡妇偷汉性猛交| 夜夜嗨av色一区二区不卡| 午夜免费久久久久| 久久香蕉频线观| 亚洲风情亚aⅴ在线发布| 欧美性少妇18aaaa视频| 欧美怡红院视频一区二区三区| 成人深夜直播免费观看| 91国产在线精品| 久久久999成人| 亚洲国产精品嫩草影院久久| 亚洲影影院av| 一区二区三区精品99久久| 亚洲sss综合天堂久久| 成人国产精品久久久| 国产精品久久久久久久电影| 亚洲女人被黑人巨大进入al| 久久视频免费在线播放| 78m国产成人精品视频| 高清欧美电影在线| 国产美女精品免费电影| 欧美一级视频在线观看| 亚洲精品美女免费| 久久综合免费视频影院| 亚洲人成网7777777国产| 日韩欧美精品网站| 亚洲国产97在线精品一区| 日韩高清有码在线| 91av福利视频| 国产视频精品久久久| 91高清视频在线免费观看| 一区二区成人av| 亚洲精品97久久| 奇米四色中文综合久久| 久久免费精品视频| 中文字幕日韩av综合精品| 亚洲成人av中文字幕| 尤物tv国产一区| 亚洲成人激情视频| 中文字幕在线看视频国产欧美在线看完整| 久久久精品美女| 国产情人节一区| 亚洲男人天堂网站| 国产精品一区二区三区毛片淫片| 亚洲在线第一页| 欧美xxxx18国产| 国产成人激情小视频| 亚洲免费视频网站| 日韩女在线观看| 欧美日韩视频在线| 国内精品免费午夜毛片| 欧美一区二区三区精品电影| 91在线直播亚洲| 97精品国产97久久久久久免费| 国产精品久久久久久av| 国产黑人绿帽在线第一区| 九九热精品视频在线播放| 久久天天躁狠狠躁夜夜躁2014| 欧美日韩黄色大片| 国产日韩在线一区| 日韩有码在线播放| 亚洲国产精品视频在线观看| 精品露脸国产偷人在视频| 91丝袜美腿美女视频网站| 欧美最顶级丰满的aⅴ艳星| 91九色单男在线观看| 欧美高清无遮挡| 国产91色在线|| 国产69精品久久久久久| 欧美性xxxxx| 91在线国产电影| 日本最新高清不卡中文字幕| 久久男人av资源网站| 精品久久久久久久中文字幕| 丁香五六月婷婷久久激情| 亚洲国产一区二区三区四区| 欧美日韩国产成人在线| 久久九九国产精品怡红院| 亚洲sss综合天堂久久| 国色天香2019中文字幕在线观看| 日本午夜精品理论片a级appf发布| xvideos亚洲| 亚洲国产美女精品久久久久∴| 欧美香蕉大胸在线视频观看| 97久久精品人人澡人人爽缅北| 亚洲欧洲国产一区| 欧美国产日韩一区二区在线观看| 性色av一区二区三区免费| 久久精品国产亚洲7777| 一区二区三区精品99久久| 亚洲成人av在线播放| 日韩在线视频中文字幕| 久久久电影免费观看完整版| 欧美高清理论片| 国产日韩欧美日韩大片| 久久国产精品影视| 色悠久久久久综合先锋影音下载| 欧美激情视频在线| 国产精品青青在线观看爽香蕉| 亚洲网址你懂得| 国产精品视频一区二区高潮| 国产精品视频在线观看| 亚洲男人的天堂网站| 国外成人免费在线播放| 国产精品丝袜高跟| 国产欧美亚洲视频| 国产日韩av在线播放| 96精品视频在线| 中文字幕亚洲色图| 国产精品久久久久久婷婷天堂| 欧美日韩一二三四五区| 欧美成人精品三级在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 日韩精品在线看| 欧美成人在线免费| 亚洲天堂av图片| 茄子视频成人在线| 岛国视频午夜一区免费在线观看| 欧美—级a级欧美特级ar全黄| 亚洲嫩模很污视频| 国产精品一区二区久久久久| 亚洲精品av在线播放| 亚洲视频在线观看视频| 亚洲乱码一区av黑人高潮| 在线视频欧美性高潮| 最新69国产成人精品视频免费| 成人午夜一级二级三级| 日韩国产欧美区| 日韩av在线免费观看| 欧美性极品xxxx娇小| 欧美性xxxx| 欧美日韩中国免费专区在线看|