`
leng_cn
  • 浏览: 299249 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过手机发送短信的程序(电脑通过数据线接手机,PDU编码,发送中文短信)

F# 
阅读更多
最近几天研究通过数据线把手机和电脑连接起来,然后发送手机短信,看了点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是字符串,要用引号引起来
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics