开发者社区> 文艺小青年> 正文

[转载]GPRS SIM300发送中文短信

简介:
+关注继续查看
通过SIM300发送中文短信息只要三步:

1. at+cscs="GSM" 采用GSM方式
2. at+cmgf=0  设置PDU模式,发送中文短信需要这个
3. at+cmgs=<长度>    发送PDU短信

1)   If   text   mode 
(+CMGF=1): 
+CMGS=<da>[,<toda>]<CR> 
text is entered   <ctrl-Z/ESC> 
ESC quits without sending 
 
2)  If  PDU  mode 
(+CMGF=0): 
+CMGS=<length><CR> 
PDU     is     given 
<ctrl-Z/ESC>

----------------

在Linux下使用minicom就能测试:

Welcome to minicom 2.1

OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n 
Compiled on Jan  7 2007, 04:48:39.

Press CTRL-A Z for help on special keys
                                                                                           
AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0                                                           
OK                                   

at+cscs="GSM"                                                                              
OK                                                                                         
at+cmgf=0
OK
at+cmgs=25
> 0011000D91683117604419F30008A70A66fe5baa950b60a8597d     (这里按ctrl+z后就可以将短信发送出去)
+CMGS: 27

OK

------------------

对上面发送的PDU内容简单说明一下:
001100           0D           91      68 3117604419F3          0008      A7          0A          66fe5baa950b60a8597d
   前序  | 目的号码长度 |国际| 目的手机号码(两位一反) | 8bit方式|允许时间|短信长度|短信内容 (Unicode)



在Linux发送中文短信:
目前,在Linux下我们一般使用的编码格式是UTF-8。如果你是使用C/C++来开发发送程序,调用函数mbstowcs()就可以将本地编码格式的中文转换成Unicode,用来发送中文短信

#include <stdlib.h>
size_t mbstowcs(wchar_t *dest,const char* src, size_t n);

注:这个函数测试了许久,也没有将中文转换为Unicode,谁有懂的请在下面回复,谢谢。

下面是PDU格式说明(转于http://blog.csdn.net/zixu/archive/2007/03/12/1527208.aspx), 不过好像与上面用与SIM300有一点出入,有空的时间在慢慢研究以下这部分的东西

第一部分PDU 格式
0891683108200105F011000B813119169083F80000A806C9363C3CA603
以上是一个SUBMIT-PDU 发出例子分析内容如下
08
91
68 31 08
20 01 05
F0
11
00
0B
81
31 19 16
90 83 F8
00
00
A8
06
C9363C3CA603
Length
Tosca
Address
FO(PDU第一个字节)
MR(消息参考号码)
Length
Toda
address
PID
DSC
VP
UDL
UD
SCA(服务中心号码)
DA(目标地址)
协议标示
数据编码标准
允许时间
用户数据长度
用户数据
1-12个字节
1字节
1字节
2-12个字节
1字节
1字节
1字节
1字节
0-140字节
 
收到的DELIVER-PDU
SCA
FO
OA
PID
DCS
SCTS
UDL
UD
服务中心号码
第一字节
原地址
协议表示
编码标准
服务中心时间戳
用户数据长度
用户数据
 
一、SCA服务中心号码
08
91
68 31 08 20 01 05 F0
Length(长度)
Tosca(服务中心号码类型)
Address(地址)
SCA服务中心号码
 
长度08即SCA区去除08外后面的字节数单位是字节如上91683108200105F0共8字节但是当长度值为00时后面SCA区将只有00后面的号码类型和地址都不存在发送短消息时从SIM卡读出SCA号码此号码要用at+csca=xxxxx设定
Tosca服务中心号发类型91为国际型81为未知类型号码A1为国内型一般为国际型
Address地址每个字节先用低位4bit后用4-7bit如果号码个数为奇数个最后一个字节的4-7bit全部设置为1即FxH如号码1234567,变化好以后就是21 43 65 F7”;
 
二、FO信息第一字节
收到的PDU,典型为04H
BIT
7
6
5
4
3
2
1
0
参数
RP
UDHI
SRI
MMS
MTI
MTI
 
发送的PDU,典型为11H
BIT
7
6
5
4
3
2
1
0
参数
RP
UDHI
SRR
VPF
VPF
RD
MTI
MTI
 
MTI 2bit消息类型00收01发其余值参考SMS with the M20文档P.22
MMS 1bit短消息服务中心是否有更多短消息等待移动台1有0无默认为1
SRI 1bit状态报告标示0不需要状态返回到移动设备1需要默认为0
UDHI 1bit用户数据头标示0用户数据没有头信息1有一般为0
RP 1bit是否有回复路径的标示1有0没有一般为0
VPF 2bit有效期限格式00 VP不存在10 VP区存在用一个字节表示是相对值01 保留11 存在半个字节表示绝对值
RD 1bit重复信元丢弃0通知服务中心碰到同源同目的地同样的MR短消息序号的短消息接受1抛弃此时将在短消息提交报告中返回一个适当的FCS值
SRR 1bit状态报告要求.
三、MR短消息参考
1个字节表示移动台向短消息服务中心提交的短消息序号从0到255一般移动模块会自动改动所以默认为00
四、OA短消息原发手机地址
OB
81
31 19 16 90 83 F8
Length(长度)
Toda(地址类型)
Address(地址)
DA(目标地址)
2-12字节
Length为地址的数字个数
Toda地址类型91为国际型81为国内型
Address地址编码方法与SCA同一个字节先用低4bit奇数个号码最后一位高四位设为F.
五、DA目的手机地址
短消息目的地址参考OA
六、PID协议标志
是短消息传输层作为高层协议参考或者是远程设备协同工作的标示需要服务商支持但是00H是所有服务商都支持的建议采用00H即可
七、DCS数据编码方法
表示数据编码方法和消息类别一般为00H默认7位编码等级号0。04为8位编码。
UCS2编码0等级为08H可以传输中文。
 
7
6
5
4
3
2
1
0
编码组
保留
X
X
X
具体如下:
编码组bit7-4 Bit3-0
OOXX
BIT5:0文本未压缩1用GSM标准压缩
Bit4:0表示bit1,0是保留没有消息类别1表示有
Bit1  Bit0   消息类别
0      0      Class0
0      1      Class1
1      0      Class2
1      1      Class3
Bit3   Bit2   字母表
0      0      默认字母表
0      1      8bit数据
1      0      UCS2编码
1      1      保留
其余情况暂不讨论
Class0短消息直接显示到用户终端
Class1短消息存储在SIM卡上
Class2短消息必须存储在SIM卡上禁止直接传输到中断
Class3短消息存贮在用户设备上
八、SCTS服务中心时间戳
告诉目标用户短消息到达时间为7个字节表示
Year Month Day Hour Minute Second Time Zone
10 40 32 21 94 83 00
表示01年4月23号12点49分38秒时区表示本地时间和格林尼治标准时间差
九、VP 合法时间
标示短消息服务中心在接到短消息后在没有发到目标机前可以保证短消息存在的时间其格式在FO中的VPF中设定一般是相对值10B这时时间如下:
VP值,16进制
相对合法时间
00-8F
(VP+1)*5分
90-A7
12小时+(VP-143)*30分钟
A8-C4
(VP-166)*1天
C5-FF
(VP-192)*1周
如果是绝对时间即VPF=11B则VP区和SCTS同.
 
十、UDL用户数据长度
1 如果用户用默认7位编码
1>没有用户数据头此数字标示7bit的字符个数
2>有用户数据头此数字表示包括用户数据头包含补丁在内在内的7bit个数
2 如果用户用8位编码
表示用户数据区的字节数有数据头信息包括在内
3 如果为UCS2编码则是用户数据区的字节数
十一、UD用户数据
1 如果是7bit编码则从前向后每个字节从低到高位使用最后不足的一个字节的各位全部用0补全最多可以有160个字符例子如下
设一个字母为x,它的编码的17bit分别为x1x7,如8个字母分别为ABCDEFGH,则编码如下
B1
A7
A6
A5
A4
A3
A2
A1
C2
C1
B7
B6
B5
B4
B3
B2
D3
D2
D1
C7
C6
C5
C4
C3
E4
E3
E2
E1
D7
D6
D5
D4
F5
F4
F3
F2
F1
E7
E6
E5
G6
G5
G4
G3
G2
G1
F7
F6
H7
H6
H5
H4
H3
H2
H1
G7
 
2 如果是8bit编码很简单最多140个字符
3 如果是UCS2编码则最多是70个字符也比较简单
至于有用户数据头



本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2010/05/25/1743732.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18615 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
13882 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
25041 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
20333 0
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
13411 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
9653 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
13885 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
18704 0
3576
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载