我写的指令的 FirstOctet字段(包含TP-MTI(2bit),TP-RD(1bit),TP-VPF(2bit),TP-RP(1bit),TP-UDHI(1bit),TP-SRR(1bit)是0X11 :二进制表示形式:0 0 0 10 0 01
也就是需要短信的状态报告的,但是当短信发送出去,被对方手机接收到后,发送的手机上并没有收到状态报告,手机也没有上报什么数据?这是为什么,请高手指教?我需要通过收到状态报告后来判断短信发送成功与否.
//---------------------------------------------------------------------------------------------
下面是每一位的含义和取值:
TP-MTI:01
TP-Message-Type-Indicator(消息类型指示符)
Bit1,0:01 指示为SMS-SUBMIT类型
TP-RD:0
TP-Reject-Duplicates(是否拒绝相同重复消息)
Bit2:0 指示短消息中心接受未转发的具有相同TP-MR的消息。
TP-VPF:10
TP-Validity-Period-Format(有效期格式)
Bit4,3:10 指示使用相对格式。
TP-SRR:0
TP-Status-Report-Request
Bit5:0 指示不使用状态报告。
TP-UDHI:0
TP-User-Data-Header-Indicator(用户数据头标示)
Bit6:0 指示这是一个SMS消息,没有用户数据头。EMS消息需要设置。
TP-RP:0
TP-Reply-Path(回复路径)
Bit7:0 指示没有设置回复路径。
5 个解决方案
#1
发送成功会返回ok
但这只意味短信到了短消息中心,不能判断对方是否收到短信。
但这只意味短信到了短消息中心,不能判断对方是否收到短信。
#2
我记的好像是如果发送指令中指示使用状态报告,发送完成后,会收到一条来自消息中心的短信,告知是否发送成功,所以发送完以后,再AT+CMGR读取试试。(注意应该有延时)
#3
报告已经有了,在发送短信之前,要先发送一个指令进行设置.
String strCmd = "AT+CNMI=2,1,2,2,1\r\n";
void *Cmd = (void*)(strCmd.c_str());
if(Port != NULL) Port->WriteComm(Cmd, strCmd.Length());
而且消息报告是放在某个寄存器上的,好像只能存10条消息报告,之后的就收不到了.用指令清空也不行,只能重启手机才能继续收到报告,有点没太弄清楚是怎么回事...
谢谢二楼的提醒,后来我们也发现了,回复OK就到短信中心了,这个就意味着发送方手机是没问题的.
结贴,给分~~~
String strCmd = "AT+CNMI=2,1,2,2,1\r\n";
void *Cmd = (void*)(strCmd.c_str());
if(Port != NULL) Port->WriteComm(Cmd, strCmd.Length());
而且消息报告是放在某个寄存器上的,好像只能存10条消息报告,之后的就收不到了.用指令清空也不行,只能重启手机才能继续收到报告,有点没太弄清楚是怎么回事...
谢谢二楼的提醒,后来我们也发现了,回复OK就到短信中心了,这个就意味着发送方手机是没问题的.
结贴,给分~~~
#4
谢谢
#5
哈哈,学习了,谢谢啊
#1
发送成功会返回ok
但这只意味短信到了短消息中心,不能判断对方是否收到短信。
但这只意味短信到了短消息中心,不能判断对方是否收到短信。
#2
我记的好像是如果发送指令中指示使用状态报告,发送完成后,会收到一条来自消息中心的短信,告知是否发送成功,所以发送完以后,再AT+CMGR读取试试。(注意应该有延时)
#3
报告已经有了,在发送短信之前,要先发送一个指令进行设置.
String strCmd = "AT+CNMI=2,1,2,2,1\r\n";
void *Cmd = (void*)(strCmd.c_str());
if(Port != NULL) Port->WriteComm(Cmd, strCmd.Length());
而且消息报告是放在某个寄存器上的,好像只能存10条消息报告,之后的就收不到了.用指令清空也不行,只能重启手机才能继续收到报告,有点没太弄清楚是怎么回事...
谢谢二楼的提醒,后来我们也发现了,回复OK就到短信中心了,这个就意味着发送方手机是没问题的.
结贴,给分~~~
String strCmd = "AT+CNMI=2,1,2,2,1\r\n";
void *Cmd = (void*)(strCmd.c_str());
if(Port != NULL) Port->WriteComm(Cmd, strCmd.Length());
而且消息报告是放在某个寄存器上的,好像只能存10条消息报告,之后的就收不到了.用指令清空也不行,只能重启手机才能继续收到报告,有点没太弄清楚是怎么回事...
谢谢二楼的提醒,后来我们也发现了,回复OK就到短信中心了,这个就意味着发送方手机是没问题的.
结贴,给分~~~
#4
谢谢
#5
哈哈,学习了,谢谢啊