簡單談談C 開發簡訊收發軟體的原理

2021-04-12 17:57:56 字數 1158 閱讀 4902

罈子裡好像很多人對如何自己用c#開發手機簡訊有興趣,正好我也做過這個,不妨今天就聊聊這個話題。

要說這個功能的原理其實並不難(我可沒說不複雜:p)。首先當然要把手機和pc連線起來。怎麼連倒是次要的,資料線/紅外/藍芽什麼的都可以。通常連線好以後pc會虛擬出乙個序列通訊口,這下就好辦了,我們只要把手機看作乙個普通的串列埠終端裝置來進行給它下命令就行了!當然,給手機發命令也是有標準的,通常是g** at指令集,不過各廠商可能會有自己的擴充。最後只要命令手機把編過碼的簡訊(一般通用的是pdu格式)替你發出去就可以了!

所以要實現這個功能牽涉到的知識點有點多:

1 串列埠通訊

2 g** at指令

3 pdu編碼(如果需要接收的話還要知道怎麼解碼)

一樣一樣來。

在vs.net 2005裡,新加了個serialport控制項(不過我還是喜歡直接定義個serialport,記得要先引用io.ports),用起來還是很方便的,所以串列埠通訊應該問題不大。

pdu編碼演算法網上有文章的,有興趣的不妨自己搜一下。主要關鍵點就是pdu字串各個欄位的編排,還有簡訊中心和接收方手機號碼的編碼(很簡單,奇偶位互換,長度為奇數的話先補f。例如,1234變成2143),中文正文的編碼(bigendian位元組順序的unicode格式編碼,說白了就是漢字的「ascii」碼)等等。

g** at相對可能就陌生點了。不過如果以前開發過modem裝置應用的話肯定會很容易上手 -- 工作方式很像的。簡單來說,傳送簡訊的過程:

向手機傳送 at+cmgs=pud長度

成功的話手機回送》 提示符(大於符後有個空格)

接著向手機傳送簡訊pdu字串,以0x1a(ctrl z)結束。

成功的話手機回送ok,整個過程結束。

這個過程如果用超級終端的話很容易看清楚。當然需要事先計算好pdu和長度。

收簡訊的過程要複雜點。首先要讓手機在收到簡訊時主動通知計算機,指令是 at+cnmi=1,1。[注:根據某些資料的說法應該設定成2,1,但是我的西門子s65不支援。這裡先置疑一下吧。]

這樣短訊息到達時手機會自動向pc傳送+cmti訊息。這個訊息中,我們取出簡訊的儲存位置和該位置下的索引號。假如發現存到了me,那麼接下來傳送at+cpms=me。成功的話會得到+cpms開頭的訊息。再傳送at+cmgr=剛才得到的索引號,成功的話就可以得到接收到的短訊息的源**了。

至於彩信...尚未涉足... 

Android收發簡訊

呼叫簡訊編輯介面 intent smsintent new intent intent.action sendto,uri.parse sms 5556 smsintent.putextra sms body press send to send me startactivity smsintent...

手機收發簡訊

手機收發簡訊,上一邊文章介紹了簡訊的編碼解碼,在此基礎上編寫了手機收發簡訊的 收發簡訊都是呼叫at指令集。原來設計了乙個版本,收簡訊採用serialport類的datareceive事件,使用at cnmi指令接收短訊息。這樣有個問題,來一條簡訊就會觸發乙個事件,這樣,如果對方發簡訊的頻率過快,特別...

Android學習 收發簡訊

使用android api類庫可以自己實現收發簡訊的功能 資訊的傳送,對mms應用程式來講主要是在資訊資料庫中建立並維護一條資訊記錄,真正的傳送過程交由底層 frameworks層 函式來處理 雖然在android系統中已經存在傳送簡訊的應用,但是如果我們在開發其他應用時需要整合傳送簡訊功能,則很方...