當下物聯網發展迅猛,物聯網卡可以接受短信指令,實現千里之外盡可掌控。本人做過一個這類項目,把相關經驗記錄下來,分享給需要的人。
物聯網卡通訊其實跟電話卡一樣,可以使用CMPP協議。不過由於物聯網卡位數為13位,未測試CMPP2.0是否支持,直接保險一點用的CMPP3.0協議。
因為CMPP3.0中號碼字段增加到32位,還增加了號碼類型字段,可能是為了擴展不同類型的卡。
Dest_terminal_Id |
32*DestUsr_tl |
Octet String |
接收短信的MSISDN號碼。 |
Dest_terminal_type |
1 |
Unsigned Integer |
接收短信的用戶的號碼類型,0:真實號碼;1:偽碼。 |
可以是用CMPP3.0協議,也就是說發送短信到物聯網卡、從物聯網卡回復短信回來,都可以直接用這套CMPP3.0協議。那么跟發手機短信有何不同之處呢,以下就是幾點不同:
1.關於編碼格式
目前物聯網卡通訊,如果是英文內容,則只支持Ascii碼,也就是Msg_Fmt必須設置成0
Msg_Fmt |
1 |
Unsigned Integer |
信息格式: 0:ASCII串; 3:短信寫卡操作; 4:二進制信息; 8:UCS2編碼; 15:含GB漢字。。。。。。 |
如果是發送中文內容,則只支持UCS2編碼,即Msg_Fmt必須設置成8
另外有個特別費解的問題是,如果是發中文內容,短信網關會自動在短信后面加上一串尾巴,類似【ayf】等。這個問題在開發的時候必須注意,以免發送的指令不能解析,需要做一些邏輯處理把尾巴去掉。
2.關於長短信
我們知道一條短信只能發140個字節的內容,如果實際要發的內容超過這個數,就必須拆成多條發送,這樣會有一些影響。為了發長短信,我們的CMPP發送程序必須做一些改造,具體請參考我的另一篇博文CMPP3.0 長短信實現方案
而對於物聯網卡來說,收發長短信必須使用 7 位的協議頭格式:06 08 04 XX XX MM NN
這也是要注意的一點,否則解析發送都會出錯。
3.關於用戶號碼類型
物聯網的用戶號碼類型選擇Dest_terminal_type=0即可。若選擇1會報錯。
其他
如遇到短信網關返回碼,可查詢以下網址看返回碼解釋
http://www.cnblogs.com/tuyile006/p/5849722.html
常見返回碼:173 是物聯網卡沒開通短信功能造成的。
這就是開發物聯網通訊過程中的經驗。經過一番努力,程序已支持:
1、支持Cmpp2.0、3.0協議;
2、支持一般的短信發送、上行短信接收、狀態報告;
3、支持長短信,包括下發長短信、上行接收長短信;
4、支持Ms Sql數據庫、MySql數據庫;
5、支持普通手機號和物聯網卡;
6、集成了郵件群發功能;
7、全套源碼Win服務、全套數據庫源碼;
提綱 1 物聯網數據卡系統源碼——前篇 2 物聯網數據卡系統源碼——通信模塊 2.2 協議封裝和實現 2.4 粘包的處理 3 物聯網數據卡系統源碼——Windows服務模塊 3.1 Windows服務模塊概述 3.2 Windows服務模塊實現 3.3 高並發回調處理 3.4 部署安裝 |