短信中VB.NET編碼PDU(一)

PDU的編碼器的工做原理是解碼器的逆過程。根據須要編碼器只須要編碼發送的PDU代碼,工做相對簡單。本文講解編碼思路,具體代碼請參考BlogPDUEncoder部分編碼

我把PDU的編碼分爲兩部分,SMSEMSEMS部分我只提供了ConcatenatedShortMessage的編碼器。這是超長短信的編碼,用得最多。spa

SMS編碼設計

編碼一個SMS通常須要以下的信息:code

TP_Data_Coding_Scheme TP_UD編碼方式it

TP_Destination_Address 對方號碼io

TP_Message_Reference 參考號碼變量

TP_Status_Report_Request 狀態報告原理

TP_User_Data 用戶信息數據

TP_Validity_Priod 有效期英文

ServiceCenterNumber 短信中心號碼

因此在編碼器中存在以上的屬性,並在Set中加入了處理代碼,將可讀信息轉換成對應的十六進制信息。

特別注意的是TP_User_Data屬性,它能夠根據用戶數據編碼自動設置TP_UDL。對於純英文編碼,TP_UDL爲全部的字符數;對於Unicode編碼,因爲一個字符由兩個字節表示,TP_UDL爲全部的字符數*2。注意檢查TP_User_Data的長度,對於SMS來講編碼後的TP_UD長度不能超過140字節。也就是說英文160個字符(140/7*8),中文70個字符。

對於TP_UD的編碼在解碼器中也有說明,在此再也不贅述。

我還設計了幾個枚舉變量:

ENUM_TP_DCS 編碼方式

ENUM_TP_SRI 狀態報告

ENUM_TP_VALID_PERIOD 有效期

ENUM_TP_VPF 有效期格式

這些枚舉變量能夠簡化輸入,也利於往後擴充。

當以上內容設置好之後,基本上一個短信的架子就出來了。此時調用GetSMSPDUCode進行組合,簡單的把十六進制拼接起來就造成了一個完整的PDU代碼。

轉自bbs.sendsms.cn

相關文章
相關標籤/搜索