PC通过手机发短信的性能问题

问题1:  
     通过AT+CMGS连续发短信时,发现手机返回状态从OK变为ERROR,或从ERROR变为OK时相当的慢,如何解决才能保持稳定并维持在3秒/每条左右!  
 
问题2:  
     通过AT+CMGW先将短信内容存入SIM卡,然后发送,结果竟然比直接从PC发送还慢,是不是手机读SIM卡的速度很慢?还是本人实验有问题?有没有命令将短信存到手机的内存而不是SIM卡?  
 
---------------------------------------------------------------  
 
设置一个发送超时变量,例如等于3秒,当通过串口发送AT+CMGS,在3秒内没有OK或ERROR返回,则也结束发送线程。  
---------------------------------------------------------------  
 
你的两个问题是一样的。  
 
OK和ERROR要等短信发送后才返回,这段时间不是你的问题,而是网络的问题。要保持稳定在3秒/个在目前的网络是不可能的!一般的发送会在3-17秒之间,短信高峰期会更慢或者超时,不信你用手机试试。  
 
从SIM发送会慢,但那个毫秒级的,两个差异是因为网络的不确定性导致的,没有直接的差异。  
---------------------------------------------------------------  
 
我试了一下,问题在这里,你如果还没有等+CMGS返回的时候就发送,后面送的这些数据会被当做PDU编码的一部分,所以不会返回OK和ERROR,你这样试,如果他不响应你先发送个Ctrl+Z的指令,表示PDU的结束,它会告诉你ERROR,你再试AT应该就可以我,我用WAVECOM试了一下没问题,你试试看,如果还不返回的话,那就真的是死了,只有关机或断电了。  
---------------------------------------------------------------  
 
临时将COM和测试程序打包,放在以下地址,解压后,直接安装即可;  
在安装使用过程中有任何问题,请和我联系:nlnc@163.com  
 
http://user.7host.com/nlnccn/smscom/smscom.rar  
---------------------------------------------------------------  
 
问题1:  
     通过AT+CMGS连续发短信时,发现手机返回状态从OK变为ERROR,或从ERROR变为OK时相当的慢,如何解决才能保持稳定并维持在3秒/每条左右!  
 
     是红外连接还是数据线连接?  
     我也曾遇到该问题,测试环境是WIN98+VB6,Cyrix  5x86,红外连接。发送数量在300条以下时,迟缓不明显。如果运行VB前没运行OFFICE,没有迟缓。  
     测试环境换在奔腾时,手机跟PC的交换数据速率有差异,这时手机没反应PC就处理完了。不同手机的最高速率是不同的,有AT指令测试手机的速率,将MSCOMM控件的速率设为一致。大概一秒每条上下。前五条较快,之后的就稳定。  
       你可先测试AT+CMGS=<Length>,不测试PDU部份。  
           
 
问题2:  
     通过AT+CMGW先将短信内容存入SIM卡,然后发送,结果竟然比直接从PC发送还慢,是不是手机读SIM卡的速度很慢?还是本人实验有问题?有没有命令将短信存到手机的内存而不是SIM卡?  
 
     要把信息写到手机,先选择存储器为手机,然后保存。  
     短信好象不能存储在手机中。  
     不管存储器是手机还是SIM卡,他们存储的信息是不连续的。比如说,手机电话簿有2条记录,存储在第1和第5个位置,新增电话时一般他保存在第2个位置。如果第2个位置删除的话,第3个位置的记录不会向前移,第2个位置还是空的。  
       我读取SIM卡的电话簿时,尚未遇到速度慢的情况,都是平稳的速率。  
 
---------------------------------------------------------------  
 
所以我总觉得GSM的网络里,达到平均1秒/条的速度是不太可能的.有人说用CDMA的机速度飞快,不知道是不是这样,可能CDMA的短信网络不一样吧.不过就算速度快又会有另外一个问题,那就是"互联互通"的问题,发是发出去了,但移动的不一定收到,得不偿失,呵呵.  
 
另外还有一个问题,不知道你注意到没有,当你连续大量发送的时候,发个几百条之后,就会连续失败,你要停止操作很久时间,比如说1个小时,才能够继续发送,否则会持续返回ERROR!  
---------------------------------------------------------------  
 
nlnc(风之8号)  :  
>"AT+CMGS指令PDU编码中必须将短信中心号码编码进去"  
不是的,如果你把PDU中的SMSC设置空值,就可以用手机中设置的号码直接发送,编码长度短一些.  
 
zhhuang2002(老兵)  :  
ctrl-z的问题,还是在于AT+CMGS和AT+CMGW之类的指令,所以以后遇到通讯不到就先Ctrl-Z然后AT,还不返回就是完蛋了,呵呵.  
另外如果想要详细的返回信息可以打开错误提示,会给出代码的,比如512之类的,你查错误表就知道错误原因了.  
发送速度只能依赖于网络.3秒/条是极限了.  
---------------------------------------------------------------  
 
我做的最快是3秒钟发送一条短信;如果短信比较长,那么可能发送一条需要5到6秒钟  
由于模块的反应速度慢,如果间隔时间太短会造成模块死掉;一般间隔4到5秒钟比较保险  
一秒钟发送一条真是令我惊讶,是什么模块的??  
---------------------------------------------------------------  
 
3s基本可以的  
我做过一个采用多线程来实现的  
对与连续发送将标志位设为这样一来发送完一条MN层链路不会立即断,可以减短连续发送的时间  
---------------------------------------------------------------  
 
zhhuang2002(老兵)  :我的错误代码,不完全,但够用了。  
long  CMobile::ParseError(CString  strResult)  
{  
           long  lCode=0;  
           CString  strTemp;  
           if(strResult.Find("OK")>=0)  
                       return  ERR_SUCCEED;  
           if(strResult.IsEmpty())  
                       m_lLastError=ERR_NO_RESPOND;  
           else  if(strResult.Find("+CME  ERROR:")>=0  ¦  ¦strResult.Find("+CMS  ERROR:")>=0  ¦  ¦strResult.Find("+CEER  ERROR:")>=0)  
           {  
                       if(strResult.Find("+CME  ERROR:")>=0)  
                       {  
                                   strTemp="+CME  ERROR:";  
                                   ParseResult(strResult,strTemp);  
                                   if(RC>=1)  
                                   {  
                                               lCode=atoi(RD[0]);  
                                               if(3==lCode  ¦  ¦4==lCode)  
                                                           m_lLastError=ERR_NOT_SUPPORT;  
                                               else  if(5==lCode  ¦  ¦6==lCode)  
                                                           m_lLastError=ERR_SIM_PIN_REQUIRED;  
                                               else  if(7==lCode)  
                                                           m_lLastError=ERR_SIM_PUK_REQUIRED;  
                                               else  if(lCode==10)  
                                                           m_lLastError=ERR_SIM_NOT_INSERTED;  
                                               else  if(11==lCode)  
                                                           m_lLastError=ERR_SIM_PIN_REQUIRED;  
                                               else  if(12==lCode)  
                                                           m_lLastError=ERR_SIM_PUK_REQUIRED;  
                                               else  if(13==lCode  ¦  ¦14==lCode  ¦  ¦15==lCode)  
                                                           m_lLastError=ERR_SIM_COMMUNICATION;  
                                               else  if(16==lCode)  
                                                           m_lLastError=ERR_INCORRECT_PASSWORD;  
                                               else  if(17==lCode)  
                                                           m_lLastError=ERR_SIM_PIN2_REQUIRED;  
                                               else  if(18==lCode)  
                                                           m_lLastError=ERR_SIM_PUK2_REQUIRED;  
                                               else  if(20==lCode)  
                                                           m_lLastError=ERR_MEMORY_FULL;  
                                               else  if(21==lCode)  
                                                           m_lLastError=ERR_INVALID_INDEX;  
                                               else  if(22==lCode)  
                                                           m_lLastError=ERR_LOCATION_EMPTY;  
                                               else  if(23==lCode)  
                                                           m_lLastError=ERR_MEMORY_FAIL;  
                                               else  if(24==lCode)  
                                                           m_lLastError=ERR_TEXT_TOO_LONG;  
                                               else  if(25==lCode)  
                                                           m_lLastError=ERR_INVALID_CHARACTERS;  
                                               else  if(26==lCode)  
                                                           m_lLastError=ERR_NUMBER_TOO_LONG;  
                                               else  if(27==lCode)  
                                                           m_lLastError=ERR_INVALID_CHARACTERS;  
                                               else  if(30==lCode)  
                                                           m_lLastError=ERR_NETWORK_SERVICE;  
                                               else  if(31==lCode)  
                                                           m_lLastError=ERR_NETWORK_TIMEOUT;  
                                               else  if(32==lCode)  
                                                           m_lLastError=ERR_NETWORK_SERVICE;  
                                               else  if(42==lCode  ¦  ¦44==lCode  ¦  ¦46==lCode)  
                                                           m_lLastError=ERR_SIM_PIN_REQUIRED;  
                                               else  if(43==lCode  ¦  ¦45==lCode  ¦  ¦47==lCode)  
                                                           m_lLastError=ERR_SIM_PUK_REQUIRED;  
                                               else  
                                                           m_lLastError=ERR_UNKNOWN_CODE;  
                                   }  
                       }  
                       else  if(strResult.Find("+CMS  ERROR:")>=0)  
                       {  
                                   strTemp="+CMS  ERROR:";  
                                   ParseResult(strResult,strTemp);  
                                   if(RC>=1)  
                                   {  
                                               lCode=atoi(RD[0]);  
                                               if(lCode<128)  
                                                           m_lLastError=ERR_NETWORK_RP;  
                                               else  if(lCode<256)  
                                                           m_lLastError=ERR_NETWORK_TP;  
                                               else  if(lCode==301)  
                                                           m_lLastError=ERR_SMS_SERVICE;  
                                               else  if(lCode==302  ¦  ¦lCode==302)  
                                                           m_lLastError=ERR_NOT_SUPPORT;  
                                               else  if(lCode=304  ¦  ¦lCode==305)  
                                                           m_lLastError=ERR_SMS_PDU_PARAMETER;  
                                               else  if(lCode==310)  
                                                           m_lLastError=ERR_SIM_NOT_INSERTED;  
                                               else  if(lCode==311  ¦  ¦lCode==312)  
                                                           m_lLastError=ERR_SIM_PIN_REQUIRED;  
                                               else  if(lCode==313  ¦  ¦lCode==314  ¦  ¦lCode==314)  
                                                           m_lLastError=ERR_SIM_COMMUNICATION;  
                                               else  if(lCode==316)  
                                                           m_lLastError=ERR_SIM_PUK_REQUIRED;  
                                               else  if(lCode==317)  
                                                           m_lLastError=ERR_SIM_PIN2_REQUIRED;  
                                               else  if(lCode==318)  
                                                           m_lLastError=ERR_SIM_PUK2_REQUIRED;  
                                               else  if(lCode==320)  
                                                           m_lLastError=ERR_MEMORY_FAIL;  
                                               else  if(lCode==321)  
                                                           m_lLastError=ERR_INVALID_INDEX;  
                                               else  if(lCode==322)  
                                                           m_lLastError=ERR_MEMORY_FULL;  
                                               else  if(lCode==330)  
                                                           m_lLastError=ERR_SMSC_NOT_FOUND;  
                                               else  if(lCode==331)  
                                                           m_lLastError=ERR_NETWORK_SERVICE;  
                                               else  if(lCode==332)  
                                                           m_lLastError=ERR_NETWORK_TIMEOUT;  
                                               else  
                                                           m_lLastError=ERR_UNKNOWN_CODE;  
                                   }  
                       }  
                       else  if(strResult.Find("+CEER  ERROR:")>=0)  
                       {  
                                   strTemp="+CEER  ERROR:";  
                                   ParseResult(strResult,strTemp);  
                                   if(RC>=1)  
                                   {  
                                               lCode=atoi(RD[0]);  
                                               if(atoi(RD[0])<128)  
                                                           m_lLastError=ERR_NETWORK_RP;  
                                               else  
                                                           m_lLastError=ERR_NETWORK_TP;  
                                   }  
                       }  
           }  
           else  if(strResult.Find("ERROR")>=0)  
                       m_lLastError=ERR_NOT_SUPPORT;  
           else  
                       m_lLastError=m_Con.m_lLastError;  
           retu。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值