目前,發(fā)送短消息常用Text和PDU(Protocol Data Unit,協(xié)議數(shù)據(jù)單元)模式。
使用Text模式收發(fā)短信代碼簡單,實(shí)現(xiàn)起來十分容易,但最大的缺點(diǎn)是不能收發(fā)中文短信;而PDU模式不僅支持中文短信,也能發(fā)送英文短信。
PDU模式收發(fā)短信可以使用3種編碼:7-bit、8-bit和UCS2編碼。7-bit編碼用于發(fā)送普通的ASCII字符,8-bit編碼通常用于發(fā)送數(shù)據(jù)消息,UCS2編碼用于發(fā)送Unicode字符。一般的PDU編碼由A B C D E F G H I J K L M十三項(xiàng)組成。
A:短信息中心地址長度,2位十六進(jìn)制數(shù)(1字節(jié))。
B:短信息中心號(hào)碼類型,2位十六進(jìn)制數(shù)。
C:短信息中心號(hào)碼,B+C的長度將由A中的數(shù)據(jù)決定。
D:文件頭字節(jié),2位十六進(jìn)制數(shù)。
E:信息類型,2位十六進(jìn)制數(shù)。
F:被叫號(hào)碼長度,2位十六進(jìn)制數(shù)。
G:被叫號(hào)碼類型,2位十六進(jìn)制數(shù),取值同B。
H:被叫號(hào)碼,長度由F中的數(shù)據(jù)決定。
I:協(xié)議標(biāo)識(shí),2位十六進(jìn)制數(shù)。
J:數(shù)據(jù)編碼方案,2位十六進(jìn)制數(shù)。
K:有效期,2位十六進(jìn)制數(shù)。
L:用戶數(shù)據(jù)長度,2位十六進(jìn)制數(shù)。
M:用戶數(shù)據(jù),其長度由L中的數(shù)據(jù)決定。
J中設(shè)定采用UCS2編碼,這里是中英文的Unicode字符。
PDU編碼協(xié)議簡單說明
例1 發(fā)送:SMSC號(hào)碼是+8613800250500,對方號(hào)碼是13693092030,消息內(nèi)容是“Hello!”。從手機(jī)發(fā)出的PDU串可以是08 91 68 31 08 20 05 05 F0 11 00 0D 91 68 31 96 03 29 30 F0 00 00 00 06 C8 32 9B FD 0E 01對照規(guī)范,具體分析:分段 含義 說明08 SMSC地址信息的長度 共8個(gè)八位字節(jié)(包括91)91 SMSC地址格式(TON/NPI) 用國際格式號(hào)碼(在前面加‘+’)68 31 08 20 05 05 F0 SMSC地址 8613800250500,補(bǔ)‘F’湊成偶數(shù)個(gè)11 基本參數(shù)(TP-MTI/VFP) 發(fā)送,TP-VP用相對格式00 消息基準(zhǔn)值(TP-MR) 00D 目標(biāo)地址數(shù)字個(gè)數(shù) 共13個(gè)十進(jìn)制數(shù)(不包括91和‘F’)91 目標(biāo)地址格式(TON/NPI) 用國際格式號(hào)碼(在前面加‘+’)68 31 96 03 29 30 F0 目標(biāo)地址(TP-DA) 8613693092030,補(bǔ)‘F’湊成偶數(shù)個(gè)00 協(xié)議標(biāo)識(shí)(TP-PID) 是普通GSM類型,點(diǎn)到點(diǎn)方式00 用戶信息編碼方式(TP-DCS) 7-bit編碼00 有效期(TP-VP) 5分鐘06 用戶信息長度(TP-UDL) 實(shí)際長度6個(gè)字節(jié)C8 32 9B FD 0E 01 用戶信息(TP-UD) “Hello!”
例2 接收:SMSC號(hào)碼是+8613800250500,對方號(hào)碼是13693092030,消息內(nèi)容是“你好!”。手機(jī)接收到的PDU串可以是08 91 68 31 08 20 05 05 F0 84 0D 91 68 31 96 03 29 30 F0 00 08 30 30 21 80 63 54 80 06 4F 60 59 7D 00 21對照規(guī)范,具體分析:分段 含義 說明08 地址信息的長度 個(gè)八位字節(jié)(包括91)91 SMSC地址格式(TON/NPI) 用國際格式號(hào)碼(在前面加‘+’)68 31 08 20 05 05 F0 SMSC地址 8613800250500,補(bǔ)‘F’湊成偶數(shù)個(gè)84 基本參數(shù)(TP-MTI/MMS/RP) 接收,無更多消息,有回復(fù)地址0D 回復(fù)地址數(shù)字個(gè)數(shù) 共13個(gè)十進(jìn)制數(shù)(不包括91和‘F’)91 回復(fù)地址格式(TON/NPI) 用國際格式號(hào)碼(在前面加‘+’)68 31 96 03 29 30 F0 回復(fù)地址(TP-RA) 8613693092030,補(bǔ)‘F’湊成偶數(shù)個(gè)00 協(xié)議標(biāo)識(shí)(TP-PID) 是普通GSM類型,點(diǎn)到點(diǎn)方式08 用戶信息編碼方式(TP-DCS) UCS2編碼30 30 21 80 63 54 80 時(shí)間戳(TP-SCTS) 2003-3-12 08:36:45 +8時(shí)區(qū)06 用戶信息長度(TP-UDL) 實(shí)際長度6個(gè)字節(jié)4F 60 59 7D 00 21 用戶信息(TP-UD) “你好!”若基本參數(shù)的最高位(TP-RP)為0,則沒有回復(fù)地址的三個(gè)段。從Internet上發(fā)出的短消息常常是這種情形。注意號(hào)碼和時(shí)間的表示方法,不是按正常順序順著來的,而且要以‘F’將奇數(shù)補(bǔ)成偶數(shù)。在PDU Mode中,可以采用三種編碼方式來對發(fā)送的內(nèi)容進(jìn)行編碼,它們是7-bit、8-bit和UCS2編碼。7-bit編碼用于發(fā)送普通的ASCII字符,它將一串7-bit的字符(最高位為0)編碼成8-bit的數(shù)據(jù),每8個(gè)字符可“壓縮”成7個(gè);8-bit編碼通常用于發(fā)送數(shù)據(jù)消息,比如圖片和鈴聲等;而UCS2編碼用于發(fā)送Unicode字符。PDU串的用戶信息(TP-UD)段最大容量是140字節(jié),所以在這三種編碼方式下,可以發(fā)送的短消息的最大字符數(shù)分別是160、140和70。這里,將一個(gè)英文字母、一個(gè)漢字和一個(gè)數(shù)據(jù)字節(jié)都視為一個(gè)字符。需要注意的是,PDU串的用戶信息長度(TP-UDL),在各種編碼方式下意義有所不同。7-bit編碼時(shí),指原始短消息的字符個(gè)數(shù),而不是編碼后的字節(jié)數(shù)。8-bit編碼時(shí),就是字節(jié)數(shù)。UCS2編碼時(shí),也是字節(jié)數(shù),等于原始短消息的字符數(shù)的兩倍。如果用戶信息(TP-UD)中存在一個(gè)頭(基本參數(shù)的TP-UDHI為1),在所有編碼方式下,用戶信息長度(TP-UDL)都等于頭長度與編碼后字節(jié)數(shù)之和。如果采用GSM 03.42所建議的壓縮算法(TP-DCS的高3位為001),則該長度也是壓縮編碼后字節(jié)數(shù)或頭長度與壓縮編碼后字節(jié)數(shù)之和。