EMS——ConcatenatedShortMessage部分
编码EMS较SMS复杂,但每条EMS的基础还是SMS,所以我直接继承了SMS类。区别主要是要处理好TP_UD和IE。对于ConcatenatedShortMessage,由于其IE和TP_UDHL占据了TP_UD的部分空间,所以每条短信英文只能容纳133字符,中文66字符。我们可以通过此信息得到短信条数。
如果TP_DCS为Unicode编码,则短信条目为:
TotalMessages = (TP_UD.Length / 4) / 66 +((TP_UD.Length / 4 Mod 66) = 0)+1
如果为7bit,则为:
TotalMessages = (tp_ud.Length / 266) -((tp_ud.Length Mod 266) = 0)+1
注意在程序中我为了简化以后的数组操作,就没有加一。
确定了短信条数以后通过一个循环就可以提取出每条短信的TP_UD。
Select Case tp_dcs
Case ENUM_TP_DCS.UCS2
tmpTP_UD = Mid(TP_UD, i * 66 * 4 + 1, 66 *4)'When TP_UDL is odd, the max length of an Unicode string in PDU code is 66Charactor.See [3GPP TS 23.040 V6.5.0 (2004-09] 9.2.3.24.1
Case ENUM_TP_DCS.DefaultAlphabet
tmpTP_UD = Mid(tp_ud, i * 133 * 2 + 1, 133* 2)
End Select
此后还需要编码IE部分,关键代码是确定TP_UDL的值。对于TP_DCS为7bit来说确定此值显得比较复杂,弄不好容易出现多一个少一个的错误。
If tp_dcs = ENUM_TP_DCS.UCS2 Then
TP_UDL = tmpTP_UD.Length / 2 + 6 + 1 '6:length of IE
End If
If tp_dcs = ENUM_TP_DCS.DefaultAlphabetThen
TP_UDL = Fix((tmpTP_UD.Length + 7 * 2) * 4/ 7) '6:length of IE
End If
然后根据3GPP里关于EMS的结构的说明就可以编写出EMS PDU的处理程序。详见原代码。
如果需要扩展EMS以适应更多种类的EMS,可以参考3GPP写出更为强大的编码程序。但最关键的还是需要处理好IE以及TP_UDL。
转自bbs.sendsms.cn
分享到:
相关推荐
本文将围绕标题“PDU解码器.rar_PDU编码_SMS PDU Library VB6_pdudecoder vb.net_vb.net pd”展开,详细阐述PDU编码的概念、工作原理,以及如何在VB.NET环境中实现短信PDU的编码和解码功能。 首先,PDU编码是一种...
在VB.NET环境下进行PDU编解码涉及到对二进制数据的处理,通常用于短信服务(SMS)的应用,比如通过短信猫来接收和发送短信。 短信猫是一种硬件设备,它可以连接到计算机上,模拟手机的功能,使计算机能够通过GSM...
总的来说,开发一个西门子.SMI和.SMO短信文件读取器需要理解PDU编码,掌握VB.NET编程,以及文件I/O和GUI设计的知识。通过编写自定义的PDU解码器,结合VB.NET的库函数,我们可以创建一个高效且用户友好的程序,帮助...
Siemens Support Tool(VB.NET)(强烈推荐下载) 作者hesicong,花费了一个寒假的时间写了7000行程序基本搞定这个软件。可以实现M55手机的通讯薄管理、文件管理、便签管理、重要记事管理、短信管理。该软件源代码内...
在VB.NET中处理PDU,我们需要熟悉GSM 03.38字符编码,以及如何将文本转换为PDU格式,同时也要知道如何从PDU解析出原始短信内容。 在hesicong的研究中,他可能已经实现了以下模块: 1. OBEX客户端:用于连接到M55...
6. **项目管理工具**:压缩包中的"SMSapplication.sln"文件通常是Visual Studio解决方案文件,暗示这个项目是在Windows环境下,使用C#或VB.NET开发的。解决方案文件包含了项目的配置、引用、依赖项等信息。 7. **...
在C++、C#、VB.NET等支持DLL导入的语言中,开发者可以通过调用DLL中的函数来实现对PDU的处理,简化了开发流程。例如,可能有一个名为`DecodePDU`的函数用于将接收到的PDU数据转换回可读的文本,而`EncodePDU`函数则...
在MMS中,PDU编码用于将多媒体内容转换为二进制数据,以便通过网络传输。它支持GIF、JPG图像格式,MID音乐文件,以及中文标题,确保了内容的多样性。 "支持GIF, JPG, MID"意味着此工具或程序能够处理这三种常见的...
1. **开发语言Demo**:这些Demo可能包括Java、Python、C#、PHP、VB.NET等多种语言的示例代码,展示了如何使用API或者特定库来控制短信猫,进行短信的发送和接收操作。每种语言的Demo都会包含连接设备、发送短信、...
开发者可以使用C#、VB.NET等语言,通过Visual Studio IDE来创建和设计用户界面。WindowsFormsApplication3.sln文件是一个解决方案文件,包含了项目的所有配置信息和引用,而WindowsFormsApplication3可能是项目的主...
并且可以在VB6、VC6、Delphi、.NET (VC.NET、C#、VB.NET、J#)、Lotus Notes、Exchange Server、VJ6、C++Builder、PowerBuilder、VBScript、JavaScript、JScript等多种开发语言和环境中使用。 #### COM组件接口描述 ...
3. 配置短信参数,如短信类型(文本或PDU模式)、编码格式(7位、8位、UCS2)等。 4. 使用适当的AT命令发送短信,如`AT+CMGF`切换到文本模式,`AT+CMGS`发送短信。 5. 监听Modem的响应,处理发送成功或失败的确认...
// 当Pdu类第一次构建时,RequestId被设为0,在编码过程中会被设置为随机值 // 对于后续请求,id会被设置成一个需要递增的值,以确保每个包都有唯一的请求ID if (pdu.RequestId != 0) { pdu.RequestId += 1; }...