最近几天研究通过数据线把手机和电脑连接起来,然后发送手机短信,看了点PDU编码的东西,那个PDU编码的东东害的我花费了两天时间没有发送出短信,而同事在无意中看到其编码的规则,加上我的理解,做些记录。
首先,通过手机发送中文短信,必须采用PDU的编码方式发送短信,所以在先要发送AT指令,告诉手机,发的是PDU编码:(C#伪代码)
SerialPort port
command = AT+CMGF=0
port.Write(command + "\r");
其次,再告诉手机,你的整个PDU的编码长度是多少:
int cnt = 15 + (pdu.Length - 32) / 2;
command = AT+CMGS=cnt;
port.Write(command + "\r");
String pdu = getPDUMessage(Message,PhoneNo);
//23=15+8,15是 PDU的编码规约头,固定是15,后面的8是你传的汉字的长度,一个汉字两个字符,所以这里的8是我传了4个汉字,规约头的购成见下面的PDU编码方法,即PDU的常量值
private string getPDUMessage(string Sms_Text, string Dest_Number)
{
string pdu = ""; //开始合成 PDU 串
pdu += "0011000D9168";
//SMSC中心号码补F凑成偶数
/*char[] tmpSmscNumber = ("13800100500" + "F").ToCharArray();
for (int i = 0; i < tmpSmscNumber.Length; i += 2) //字符两两对调
{
pdu += tmpSmscNumber[i + 1].ToString();
pdu += tmpSmscNumber[i].ToString();
}*/这段代码原来是要加上短信服务中心的号码,加上后不能发短信了,所以得去掉
char[] tmpDestNumber = (Dest_Number + "F").ToCharArray();//对方号码
for (int i = 0; i < tmpDestNumber.Length; i += 2) //字符两两对调
{
pdu += tmpDestNumber[i + 1].ToString();
pdu += tmpDestNumber[i].ToString();
}
pdu += "000800"; //08 表示采用 UCS2 编码
//短信正文转为Unicode
byte[] tmpSmsText = Encoding.Unicode.GetBytes(Sms_Text);
pdu += tmpSmsText.Length.ToString("X2"); //正文内容长度
for (int i = 0; i < tmpSmsText.Length; i += 2) //高低字节对调
{
pdu += tmpSmsText[i + 1].ToString("X2");//("X2")转为16进制
pdu += tmpSmsText[i].ToString("X2");
} //PDU串 完成
return pdu;
}
最后,发送PDU的短信
command = pdu + "\x01a";
port.Write(command);
我开始一直发送不成功的原因就是PDU的长度和实际长度不一致造成的
注意,里面的command是字符串,要用引号引起来
分享到:
相关推荐
在实际应用中,短信PDU编码和解码通常由手机操作系统或第三方应用程序处理。然而,对于开发者而言,理解这一过程有助于更好地理解和调试与短信相关的程序。例如,如果你正在开发一个能够接收和发送自定义PDU的软件,...
3. **短信收发**:短信的发送和接收涉及多个步骤,包括构建PDU、发送PDU到短信中心(SMSC)、通过网络传输以及将接收到的PDU解码成可读文本。这个程序实现了这些步骤,使得开发者可以方便地集成短信功能到自己的应用...
在移动通信领域,PDU(Protocol Data Unit,协议数据单元)编码是一种用于短信服务(Short Message Service, SMS)的技术,它允许短信在GSM网络中有效地传输。PDU模式是SMS消息的一种二进制表示形式,用于处理和解析...
在IT行业中,尤其是在移动通信和嵌入式系统领域,短信编码和PDU(Protocol Data Unit,协议数据单元)是至关重要的概念。对于初学者来说,理解这些知识点是开发GSM(Global System for Mobile Communications,全球...
GSM模块PDU编码发送短信是一种在嵌入式系统或者应用程序中通过GSM模块与手机网络进行通信的技术。PDU(Protocol Data Unit)编码是GSM短信服务中的一个关键概念,用于将文本信息转换为二进制格式,以便于GSM网络传输...
### PDU编码与短信收发技术详解 #### 一、PDU编码简介 PDU(Protocol Data Unit)编码是GSM网络中用于处理短信的一种重要技术。它涉及到短信的发送与接收过程中的数据格式化,使得短信能够在不同设备之间进行有效...
在这个类中,会调用`PduPack.java`中的方法将待发送的文本消息转化为PDU,然后通过串口将PDU数据发送给短信猫,短信猫再将其发送到指定的手机号码。 在实际应用中,开发者还需要处理各种异常情况,如串口通信失败、...
3. 发送PDU数据:通过GSM网络的短信接口发送PDU编码的短信。 4. 接收PDU数据:接收来自网络的PDU数据,并解析其中的控制信息和字符数据。 5. PDU解码:将接收到的PDU数据转换回文本格式,供用户阅读。 通过理解PDU...
### PDU短信发送编码程序(C#) #### 一、PDU模式简介 PDU(Protocol Description Unit)模式是一种用于在GSM网络中发送短信的技术。它允许用户通过编写特定格式的数据来构造短信消息,这种方式相比于文本模式(如...
PDU(Protocol Data Unit,协议数据单元)模式是GSM通信系统中用于短信服务(SMS)的一种编码方式,它是一种二进制格式,用于在移动网络中传输短信数据。理解并掌握PDU模式发送短信的知识点对于进行底层通信开发或者...
在GSM网络中,短信服务(Short Message Service, SMS)是通过一个称为Protocol Data Unit(PDU)的编码方式来传输文本消息的。PDU编码是GSM7位编码集的一种扩展,它允许在有限的字节空间内传递更多的信息,包括特殊...
PDU短信编码是一种在GSM通信系统中用于发送和接收短信的二进制编码格式,全称为Protocol Data Unit。这个工具对于那些想要深入了解移动通信技术,尤其是短信服务(Short Message Service, SMS)的人来说非常有用。...
对于短信服务,PDU模式是原始的、低级别的数据格式,由一系列16进制数字组成,包含了短信的所有必要组成部分,如发送者和接收者的电话号码、短信类型、字符编码、以及实际的短信内容等。 短信PDU编码规则主要包括...
这个升级版的工具能够帮助开发者高效地处理和理解PDU格式的短信,极大地简化了短信程序的开发过程。 短信在传输过程中,通常会经历两种编码形式:7位ASCII编码和16位UCS2编码。7位ASCII编码适用于英文和其他单字节...
此工具的独特之处在于,它不仅能够将短信内容转化为PDU格式,而且生成的直接就是AT命令,这对于那些需要通过串行通信接口控制SIM卡模块或手机进行短信发送的开发者来说,无疑极大地简化了工作流程。 AT命令是...
总的来说,PDU编码是短信通信中的一个重要技术,它允许发送和接收包含各种字符集的短信,尤其是对于支持多语言环境的应用程序来说,理解和运用PDU编码是必不可少的技能。在处理PDU编码时,还需要注意字符填充、校验...
本项目涉及的是利用C#实现短信发送功能,主要依赖于PDU(Protocol Data Unit)类,这是一种用于GSM通信协议的数据结构,用于编码和解码短信。 PDU模式是短信通信中的一种低级别格式,它直接对应于GSM 03.38标准,该...
PDU模式是短信服务中心(SMSC)与手机之间交换短信的一种方式,它使用二进制编码来传输数据。在C语言中实现PDU短信的编解码可以帮助开发者理解短信传输的底层工作原理,以及如何在实际应用中处理这类通信任务。 ...