短信中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

相关文章
相关标签/搜索