短信回执的解析处理
来源:互联网 发布:java二级考试历年真题 编辑:程序博客网 时间:2024/05/19 05:02
一、硬件接口
GSM MODEM支持GSM07.05、GSM07.07所定义的的AT指令集。通过串口与计算机相连
二、短消息回执设置
AT CNMI=2,2,0,1,1 //新收到的短信直接发送至TE终端,不存储在SM卡中,这是关键的一步,如果设置不对,可能收不到短信回执,切记!下面将它的意思说明如下:
AT CNMI=<mode>,<mt>,<bm>,<ds>,<brf>
参数:
mode:
0——缓存在终端
1——直接发送到TE
mt:
0——接收到新的SMS不返回事件
1——如果接收到的SMS存储在na ,则返回
CMTI:<mem>,<index>
2——除了Class2 SMS,新的SMS直接发送到终端,返回:
CMT:<length><CR><LF><PDU>
3——Class3 SMS使用mt=2的方法返回,其他类型的使用mt=1的方法返回。
bm:
0——小区广播不通知
2——新的小区广播通知,返回
CBM:<length><CR><LF ><pdu>
3——Class3格式的小区广播通知,使用bm=2格式
ds:
0——状态报告不通知
1——新的状态报告通知,返回:
CDS:<length><CR><LF><pdu>
2——如果新的状态报告存储到ME,则返回:
CDSI:<mem>,<index>
brf:
1——始终为1
三、代码设置
一般GSM MODEM硬件厂商,都会提供一段现成的代码,把代码里的11该成31即可,这条也是必须设置正确,否则也是看不到短信回执的,下面本人将厂商提供的Delphi代码给大家列出来。
function TForm_Main.SmsSend(comm : TComm;csca, dst: string; content: WideString): Boolean;
var
s : string;
t : string;
l : Integer;
tp : Integer;
begin
if csca = '' then
s := '00'
else
begin
t := '91' TelNumEncode(csca);
FmtStr(t, '%2.2X%s', [Length(t) div 2, t]);
s := t;
end;
l := Length(s) div 2;
tp := $11; //把此处的11改成31
tp := tp or $80;
FmtStr(t, '%2.2X', [tp]);
s := s t;
s := s '00';
t := TelNumEncode(dst);
FmtStr(t, '%2.2X91%s', [Length(t) - Count(t, 'F'), t]);
s := s t;
s := s '000801';
if Length(content) > MAX_SMS_LENGTH then
Delete(content, MAX_SMS_LENGTH 1, Length(content) - MAX_SMS_LENGTH);
t := USC2Encode(content);
FmtStr(t, '%2.2X%s', [Length(t) div 2, t]);
s := s t;
FmtStr(s, 'AT CMGS=%d' #13 '%s' #$1A, [(Length(s) div 2) - l, s]);
PushCmd(comm,s);
Result := True;
end;
四、操作
在超级终端设置cnmi
at+cnmi=1,1,0,1,1
OK
再发送一条短信返回OK后大概5s终端返回了
CDS: 26
0006320D91683161721356F6506071415354005060714153640000
第一段000632
000632的意思是,此sim卡号从启用到在,你当前发送的短信总数量.不信你可以连续发送两条,看看递增结果,这个是16进制格式.0D接收方号码长度
0D//接收方号码长度
91 //短信中心号码类型
683161721356F6//接收方号码
50607141535400//信息到达短信中心的时间
5060714153640000//信息发送到接收方的时间
0006320D91683161721356F6506071415354005060714153640000
这条消息就是短信中心返回的发送方发送给接收方短信回执,以后要做的事就是把这段回执信息解析出来就行了,经过奇偶对换位置,就得到了如:
“短消息中心在‘2005-06-17 14::35:45’收到了本号发给13162731656的消息,’13162731656’在’2005-06-17 14:35:46’时收到了本号发出的信息
至此已完成了短信回执的全部任务,后续要做的事就是在接到回执的时候把手机号码解析出来,就可以进行统计分析了。
五、
本文就两处需要修改,一条就是:AT CNMI=2,2,0,1,1另一条:把代码中的11改成31.只有修改了这两条才可能有短信回执,否则再怎么做也不会出现回执的 。
GSM MODEM支持GSM07.05、GSM07.07所定义的的AT指令集。通过串口与计算机相连
二、短消息回执设置
AT CNMI=2,2,0,1,1 //新收到的短信直接发送至TE终端,不存储在SM卡中,这是关键的一步,如果设置不对,可能收不到短信回执,切记!下面将它的意思说明如下:
AT CNMI=<mode>,<mt>,<bm>,<ds>,<brf>
参数:
mode:
0——缓存在终端
1——直接发送到TE
mt:
0——接收到新的SMS不返回事件
1——如果接收到的SMS存储在na ,则返回
CMTI:<mem>,<index>
2——除了Class2 SMS,新的SMS直接发送到终端,返回:
CMT:<length><CR><LF><PDU>
3——Class3 SMS使用mt=2的方法返回,其他类型的使用mt=1的方法返回。
bm:
0——小区广播不通知
2——新的小区广播通知,返回
CBM:<length><CR><LF ><pdu>
3——Class3格式的小区广播通知,使用bm=2格式
ds:
0——状态报告不通知
1——新的状态报告通知,返回:
CDS:<length><CR><LF><pdu>
2——如果新的状态报告存储到ME,则返回:
CDSI:<mem>,<index>
brf:
1——始终为1
三、代码设置
一般GSM MODEM硬件厂商,都会提供一段现成的代码,把代码里的11该成31即可,这条也是必须设置正确,否则也是看不到短信回执的,下面本人将厂商提供的Delphi代码给大家列出来。
function TForm_Main.SmsSend(comm : TComm;csca, dst: string; content: WideString): Boolean;
var
s : string;
t : string;
l : Integer;
tp : Integer;
begin
if csca = '' then
s := '00'
else
begin
t := '91' TelNumEncode(csca);
FmtStr(t, '%2.2X%s', [Length(t) div 2, t]);
s := t;
end;
l := Length(s) div 2;
tp := $11; //把此处的11改成31
tp := tp or $80;
FmtStr(t, '%2.2X', [tp]);
s := s t;
s := s '00';
t := TelNumEncode(dst);
FmtStr(t, '%2.2X91%s', [Length(t) - Count(t, 'F'), t]);
s := s t;
s := s '000801';
if Length(content) > MAX_SMS_LENGTH then
Delete(content, MAX_SMS_LENGTH 1, Length(content) - MAX_SMS_LENGTH);
t := USC2Encode(content);
FmtStr(t, '%2.2X%s', [Length(t) div 2, t]);
s := s t;
FmtStr(s, 'AT CMGS=%d' #13 '%s' #$1A, [(Length(s) div 2) - l, s]);
PushCmd(comm,s);
Result := True;
end;
四、操作
在超级终端设置cnmi
at+cnmi=1,1,0,1,1
OK
再发送一条短信返回OK后大概5s终端返回了
CDS: 26
0006320D91683161721356F6506071415354005060714153640000
第一段000632
000632的意思是,此sim卡号从启用到在,你当前发送的短信总数量.不信你可以连续发送两条,看看递增结果,这个是16进制格式.0D接收方号码长度
0D//接收方号码长度
91 //短信中心号码类型
683161721356F6//接收方号码
50607141535400//信息到达短信中心的时间
5060714153640000//信息发送到接收方的时间
0006320D91683161721356F6506071415354005060714153640000
这条消息就是短信中心返回的发送方发送给接收方短信回执,以后要做的事就是把这段回执信息解析出来就行了,经过奇偶对换位置,就得到了如:
“短消息中心在‘2005-06-17 14::35:45’收到了本号发给13162731656的消息,’13162731656’在’2005-06-17 14:35:46’时收到了本号发出的信息
至此已完成了短信回执的全部任务,后续要做的事就是在接到回执的时候把手机号码解析出来,就可以进行统计分析了。
五、
本文就两处需要修改,一条就是:AT CNMI=2,2,0,1,1另一条:把代码中的11改成31.只有修改了这两条才可能有短信回执,否则再怎么做也不会出现回执的 。
- 短信回执的解析处理
- 有关短信息回执的解析处理
- 有关短信息回执的解析处理
- 短信回执设置
- SMS PDU 短信回执设置
- 短信猫发送短信没有回执
- mas短信机webvice发送与回执
- 68MainActivity的消息回执
- 短信接收--短信接收的pdu解析
- GSM短信的简单解析
- 关于Android短信的解析
- 短信的发送和解析
- 超长短信的处理办法
- 超长短信的处理办法
- 超长短信的处理办法
- 关于短信接口的处理
- 红十字总会的捐款回执
- openfire smack消息回执设置,处理掉包问题
- Thinking in Exception(Base on Alfresco)
- XP中的用户需求分析:Planning Game 和 User Story概述
- linux 下的crontab如何写
- 开博客啦
- lcc 源码读书笔记1之操作符的宏定义
- 短信回执的解析处理
- SQLHelper使用
- 需求分析的20例法则
- 电暖炉和节能环保意识
- LOD地形设计(六)
- PDU格式详解
- [网络]XP下安装装SQL2000企业版本
- 冰灾严重制约了情人节
- 需求分析检查表