共有三種方式來(lái)發(fā)送和接收SMS信息:Block Mode, Text Mode和PDU Mode。其中PDU Mode被所有手機(jī)支持,可以使用任何字符集,這也是手機(jī)默認(rèn)的編碼方式。
發(fā)送短消息常用Text和PDU(Protocol Data Unit,協(xié)議數(shù)據(jù)單元)模式。使用Text模式收發(fā)短信代碼簡(jiǎn)單,實(shí)現(xiàn)起來(lái)十分容易,但最大的缺點(diǎn)是不能收發(fā)中文短信;而PDU模式不僅支持中文短信,也能發(fā)送英文短信。PDU模式收發(fā)短信可以使用3種編碼: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)段最大容量(可以發(fā)送的短消息的最大字符數(shù))分別是160、140和70。這里,將一個(gè)英文字母、一個(gè)漢字和一個(gè)數(shù)據(jù)字節(jié)都視為一個(gè)字符。
PDU串的用戶信息長(zhǎng)度(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),在所有編碼方式下,用戶信息長(zhǎng)度(TP-UDL)都等于頭長(zhǎng)度與編碼后字節(jié)數(shù)之和。如果采用GSM 03.42所建議的壓縮算法(TP-DCS的高3位為001),則該長(zhǎng)度也是壓縮編碼后字節(jié)數(shù)或頭長(zhǎng)度與壓縮編碼后字節(jié)數(shù)之和。
PDU相當(dāng)于一個(gè)數(shù)據(jù)包,它由構(gòu)成消息(SMS)的信息組成。作為一種數(shù)據(jù)單元,它必須包含源/目的地址、保護(hù)(有效)時(shí)間、數(shù)據(jù)格式、協(xié)議類(lèi)型和正文,正文長(zhǎng)度可達(dá)140字節(jié),它們都以十六進(jìn)制表示。PDU結(jié)構(gòu)根據(jù)短消息由移動(dòng)終端發(fā)起或以移動(dòng)終端為目的而不同。每條消息可以發(fā)送140個(gè)字節(jié),由于本系統(tǒng)中最長(zhǎng)的數(shù)據(jù)串沒(méi)有超過(guò)140個(gè)字節(jié),因此數(shù)據(jù)均可以用一條消息來(lái)發(fā)送。
一般的PDU編碼由A B C D E F G H I J K L M十三項(xiàng)組成。
A:短信息中心地址長(zhǎng)度,2位十六進(jìn)制數(shù)(1字節(jié))。
B:短信息中心號(hào)碼類(lèi)型,2位十六進(jìn)制數(shù)。
C:短信息中心號(hào)碼,B+C的長(zhǎng)度將由A中的數(shù)據(jù)決定。
D:文件頭字節(jié),2位十六進(jìn)制數(shù)。
E:信息類(lèi)型,2位十六進(jìn)制數(shù)。
F:被叫號(hào)碼長(zhǎng)度,2位十六進(jìn)制數(shù)。
G:被叫號(hào)碼類(lèi)型,2位十六進(jìn)制數(shù),取值同B。
H:被叫號(hào)碼,長(zhǎng)度由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ù)長(zhǎng)度,2位十六進(jìn)制數(shù)。
M:用戶數(shù)據(jù),其長(zhǎng)度由L中的數(shù)據(jù)決定。J中設(shè)定采用UCS2編碼,這里是中英文的Unicode字符。
PDU編碼協(xié)議簡(jiǎn)單說(shuō)明
例1 發(fā)送:SMSC號(hào)碼是
+8613800250500,對(duì)方號(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
對(duì)照規(guī)范,具體分析:
分段 含義 說(shuō)明
08 SMSC地址信息的長(zhǎng)度 共8個(gè)八位字節(jié)(包括91)
91 SMSC地址格式(TON/NPI) 用國(guó)際格式號(hào)碼(在前面加‘+’)
68 31 08 20 05 05 F0 SMSC地址 8613800250500,補(bǔ)‘F’湊成偶數(shù)個(gè)
11 基本參數(shù)(TP-MTI/VFP) 發(fā)送,TP-VP用相對(duì)格式
00 消息基準(zhǔn)值(TP-MR) 0
0D 目標(biāo)地址數(shù)字個(gè)數(shù) 共13個(gè)十進(jìn)制數(shù)(不包括91和‘F’)
91 目標(biāo)地址格式(TON/NPI) 用國(guó)際格式號(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類(lèi)型,點(diǎn)到點(diǎn)方式
00 用戶信息編碼方式(TP-DCS) 7-bit編碼
00 有效期(TP-VP) 5分鐘
06 用戶信息長(zhǎng)度(TP-UDL) 實(shí)際長(zhǎng)度6個(gè)字節(jié)
C8 32 9B FD 0E 01 用戶信息(TP-UD) “Hello!”
例2 接收:SMSC號(hào)碼是
+8613800250500,對(duì)方號(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
對(duì)照規(guī)范,具體分析:
分段 含義 說(shuō)明
08 地址信息的長(zhǎng)度 個(gè)八位字節(jié)(包括91)
91 SMSC地址格式(TON/NPI) 用國(guó)際格式號(hào)碼(在前面加‘+’)
68 31 08 20 05 05 F0 SMSC地址 8613800250500,補(bǔ)‘F’湊成偶數(shù)個(gè)
84 基本參數(shù)(TP-MTI/MMS/RP) 接收,無(wú)更多消息,有回復(fù)地址
0D 回復(fù)地址數(shù)字個(gè)數(shù) 共13個(gè)十進(jìn)制數(shù)(不包括91和‘F’)
91 回復(fù)地址格式(TON/NPI) 用國(guó)際格式號(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類(lèi)型,點(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 用戶信息長(zhǎng)度(TP-UDL) 實(shí)際長(zhǎng)度6個(gè)字節(jié)
4F 60 59 7D 00 21 用戶信息(TP-UD) “你好!”
詳細(xì)解析:
0891683108200505F011190D91683105155694F50008FF10008FF044F60597D
<1>短信中心地址字段:0891
08:Address-Lengt(地址長(zhǎng)度),短信息中心地址長(zhǎng)度為8個(gè)字節(jié),是(91)+(683108200505F0)的長(zhǎng)度,8個(gè)8位字節(jié)
91地址類(lèi)型:10010001 Bit7:1。始終為1 Bits 6,5,4:Type-of-Number(號(hào)碼類(lèi)型):001,代表Internation Number。也即是號(hào)碼前加“+”。注意:對(duì)某些比較特殊的號(hào)碼,例如手機(jī)與小靈通的互通時(shí),這里不能設(shè)置為001,而要設(shè)置成000,代表號(hào)碼前沒(méi)有“+”,否則無(wú)法接收。
下面是GSM03.40協(xié)議號(hào)碼類(lèi)型的解釋?zhuān)?br> 0 0 0 Unknown
0 0 1 International number
0 1 0 National number
0 1 1 Network specific number
1 0 0 Subscriber number
1 0 1 Alphanumeric(coded according to TS03.38 7-bit default alphabet)
1 1 0 Abbreviated number
1 1 1 Reserved for extension
ll not interpret reserved values but will store them as received.
Bits 3,2,1,0:Numbering-plan-identification(號(hào)碼鑒別),0000—未知,0001—ISDN/電話號(hào)碼(E.164/E.163),1111—留作擴(kuò)展;一般默認(rèn)為0001,表示電話號(hào)碼類(lèi)型的。下面是GSM03.40號(hào)碼鑒別的解釋?zhuān)?br>Bits3 2 1 0
0 0 0 0 Unknown
0 0 0 1 ISDN/telephone numbering plan (E.164/E.163)
0 0 1 1 Data numbering plan (X.121)
0 1 0 0 Telex numbering plan
1 0 0 0 National numbering plan
1 0 0 1 Private numbering plan
1 0 1 0 ERMES numbering plan (ETSI DE/PS 3 01-3)
1 1 1 1 Reserved for extension
All other values are reserved.
<2>短信中心號(hào)碼:683108200805F0
一個(gè)字節(jié)內(nèi)反轉(zhuǎn),8613800280500,如果長(zhǎng)度為奇數(shù)則需要加“F”補(bǔ)齊。比如號(hào)碼為:+8613505165495,去掉"+"后在末尾添加F變?yōu)椋?613505165495F,再將手機(jī)號(hào)碼的奇數(shù)位和偶數(shù)位的相交換為683105155694F5
<3>FirstOctet字段:1119
(1)11 包含TP-MTI(2bit),TP-RD(1bit),TP-VPF(2bit),TP-RP(1bit),TP-UDHI(1bit),TP-SRR(1bit)
二進(jìn)制表示形式:0 0 0 10 0 01
TP-MTI:01 TP-Message-Type-Indicator(消息類(lèi)型指示符)
Bit1,0:00—讀出(Deliver); 01—提交(Submit)
Bit1,0:01指示為SMS-SUBMIT類(lèi)型
下面是GSM03.40的解釋?zhuān)?br> bit1 bit0 Message type
0 0 SMS-DELIVER (in the direction SC to MS)
0 0 SMS-DELIVER REPORT (in the direction MS to SC)
1 0 SMS-STATUS-REPORT (in the direction SC to MS)
1 0 SMS-COMMAND (in the direction MS to SC)
0 1 SMS-SUBMIT (in the direction MS to SC)
0 1 SMS-SUBMIT-REPORT (in the direction SC to MS)
1 1 ReservedTP-RD:0 TP-Reject-Duplicates(是否拒絕相同重復(fù)消息)
Bit2:0—接受復(fù)制; 1—拒絕復(fù)制
Bit2:0 指示短消息中心接收未轉(zhuǎn)發(fā)的具有相同TP-MR的消息。
Bit 2:
0 Instruct the SC to accept an SMS-SUBMIT for an SM still held in the SC which has the same TP-MR and the same TP-DA as a previously submitted SM from the same OA.
1 Instruct the SC to reject an SMS-SUBMIT for an SM still held in the SC which has the same TP-MR and the same TP-DA as the previously submitted SM from the same OA. In this case an appropriate TP-FCS value will be returned in the SMS-SUBMIT-REPORT.
TP-VPF:10 TP-Validity-Period-Format(有效期格式)
Bit4,3::00—不提供(Not present);01—預(yù)留; 10—整型(標(biāo)準(zhǔn)),指使用相對(duì)格式;11—提供8位字節(jié)的一半(Semi-Octet Represented)
下面是GSM03.40的解釋:
bit4 bit3
0 0 TP-VP field not present
1 0 TP-VP field present and integer represented (relative)
0 1 Reserved
1 1 TP-VP field present and semi-octet represented (absolute)
TP-SRR:0 TP-Status-Report-Request
Bit5: 1:需要報(bào)告,0:不需要報(bào)告。
Bit 5:
0 A status report is not requested
1 A status report is requested
TP-UDHI:0 TP-User-Data-Header-Indicator(用戶數(shù)據(jù)頭標(biāo)示) Bit6: 1:含頭信息 0:不含頭信息,指示這是一個(gè)SMS消息,沒(méi)有用戶數(shù)據(jù)頭,EMS(增強(qiáng)消息業(yè)務(wù))消息需要設(shè)置。圖片鈴聲這些都是包含頭部信息的.文本不包含頭部信息
Bit 6
0 The TP-UD field contains only the short message
1 The beginning of the TP-UD field contains a Header in addition to the short message
TP-RP:0 TP-Reply-Path(回復(fù)路徑) Bit7: 1:設(shè)置回復(fù)路徑,0:沒(méi)有設(shè)置回復(fù)路徑。
下面是GSM03.40解釋?zhuān)?br>Bit 7:
0: TP-Reply-Path parameter is not set in this SMS-SUBMIT/DELIVER
1: TP-Reply-Path parameter is set in this SMS-SUBMIT/DELIVER
(2)消息參考值TP-MR (TP-Message-Reference):19如果使用"00" 值代表讓電話自己設(shè)置消息參考值.
<4> 對(duì)方號(hào)碼字段:0D913105155694F5
0D:目標(biāo)地址數(shù)字個(gè)數(shù),共13個(gè)十進(jìn)制數(shù)(不包括91和‘F’)
91:地址類(lèi)型,同短信中心號(hào)碼設(shè)置.
3105155694F5:目標(biāo)手機(jī)號(hào)碼。
<5>上層協(xié)議標(biāo)識(shí)TP-PID(TP-Protocol-Identifier):00
一般設(shè)置為00,表示普通GSM,點(diǎn)對(duì)點(diǎn) <6> 數(shù)據(jù)編碼設(shè)置TP-DCS(TP-Data-Coding-Scheme):08
指示TP-UD的編碼方式。08代表Unicode方式。參照GSM03.38協(xié)議:
Bit 3,2
00 Default alphabet
01 8 bit
10 UCS2 (16bit) [10]
11 Reserved
<7>有效期TP-VP(TP-Validity-Period):FF
FF表示最大。
<8> 用戶數(shù)據(jù)長(zhǎng)度TP-UDL(TP-User-Data-Length):4
用戶數(shù)據(jù)實(shí)際長(zhǎng)度。注意不同編碼下用戶長(zhǎng)度定義不同。
<9>用戶數(shù)據(jù) :4F60597D "你好"的Unicode編碼
你:0x4F60;好:0x597D
2:手機(jī)接收的PDU串
0891683108200505F0040D91683105155694F5000850208151754500044F60597D
<1>短信中心地址字段:0891683108200505F0,即是+8613800250500
<2>FirstOctet :04 其二進(jìn)制代碼:00000100
TP-MTI:00
TP-MMS(TP-More-Message-to-Send):1 短信中心沒(méi)有更多的消息發(fā)送
TP-SRI: 0
TP-UDHI:0
TP-RP: 0
<3>發(fā)送方號(hào)碼 :0D91683105155694F5 即+8613505165495
<4>協(xié)議標(biāo)識(shí): 00 TP-DCS 點(diǎn)對(duì)點(diǎn)
<5>編碼方式: 08 TP-DCS Unicode編碼
<6>短信中心時(shí)間 50208151754500
字節(jié)反轉(zhuǎn)05/02/18 15:57:45 最后的00代表時(shí)區(qū),這里為0
<7>用戶數(shù)據(jù)長(zhǎng)度 :4
<8>用戶數(shù)據(jù):4F60597D
中文“你好”的Unicode編碼