長簡訊與簡訊簽名

2021-07-04 18:05:24 字數 1073 閱讀 6026

長簡訊一般是指超過70個漢字的簡訊內容,由於長簡訊需要加增加長簡訊的協議頭(6個位元組),所以,每條簡訊就不是70個了,而是67個漢字[即字元長度是134]。6個位元組的協力頭如:6位協議頭格式:05 00 03 xx mm nn.

c++實現如下:

[cpp]view plain

copy

char

bhead[20] = ;  

sprintf(bhead,"%c%c%c%c%c%c"

,5,0,3,1,smscount,getsmsindex() +1);   

[cpp]view plain

copy

//smscount 拆分後簡訊的數量,getsmsindex()+1 第幾條拆分簡訊 .

memcpy(smscontent,bhead,6);           //smscontent 加6位位元組的頭協議的簡訊內容

memcpy(smscontent + 6,content,length);//content 拆分的簡訊內容

smslenth = length + 6;  

submit->setcontent(smscontent,smslenth);  

那簡訊簽名跟長簡訊有啥關係呢? 有這麼一條公式來判斷:67*n-簽名字數-2<=臨界區<=67*n [n指長簡訊拆分成為幾條簡訊]。 如果該條簡訊在臨界區之內,傳送的簡訊內容的最後幾位就會被簡訊簽名覆蓋,甚至導致簡訊內容丟失一大半。

那如何來避免簡訊簽名覆蓋的問題呢? 很簡單,傳送的簡訊內容不能在臨界區內。一般如果已經在臨界區內了,我們不可能減少簡訊內容,那麼可以通過簡訊內容後面新增相應n個空格之後,簡訊內容不在臨界區內再拆分傳送。如上面的要傳送130個字數的,我們可以通過在簡訊內容新增5個空格,變成135個字數後再拆分。其實135個字數拆分的臨界區是[192,201],所以135個字數不會在臨界區之內。

最後說明一下所謂長簡訊是指簡訊的大小超過了單條簡訊的限制,

需將簡訊拆分成幾條簡訊然後分別傳送

,接收的時候將幾條簡訊拼在一起組成原始簡訊的內容,對於拆分後每條簡訊的長度有一定的限制與單條簡訊有區別。

長簡訊格式

超長簡訊 簡訊內容超過70個漢字,提交給閘道器時候需要分成多條,但是使用者手機接收時候是一條 sp角度,手機傳送長簡訊概念一樣 在cmpp協議裡,cmpp submit訊息定義中有相應的引數配置 tp udhi 0代表內容體裡不含有協議頭資訊 1代表內容含有協議頭資訊 長簡訊,push簡訊等都是在內...

設定傳送超長簡訊

cmpp協議中,cmpp submit message中有兩個欄位pk total和pk numer,恰看起來,這就是傳送超長簡訊的設定引數,其實不然,這兩個引數的設定,應該是沒有用處。傳送超長簡訊,需要做兩件事情 設定tp udhi的值設定為1,在訊息正文中增加協議頭。協議後可以兩種格式,分別是長...

設定傳送超長簡訊

cmpp協議中,cmpp submit message中有兩個欄位pk total和pk numer,恰看起來,這就是傳送超長簡訊的設定引數,其實不然,這兩個引數的設定,應該是沒有用處。傳送超長簡訊,需要做兩件事情 設定tp udhi的值設定為1,在訊息正文中增加協議頭。協議後可以兩種格式,分別是長...