回 帖 发 新 帖 刷新版面

主题:linux下写sms发送阅读程序

根据gsm0705规范,发送短信息的命令是AT+CMGS=<length><CR>pdu<CTRL-Z>;
用c实现如下:
         .
         .
         .
     char at_command_d[128];
     char pdu_buff[1024];
     memset(pdu_buff,0,sizeof(pdu_buff));
     memset(at_command_d,o,sizeof(at_command_d));

     create_smssubmit_pdu(pdu_buff);

     at_command(at_command_d,"+CMGS");
     add_at_command(at_command_d,"=%d\13",(strlen(pdu_buff)/2-1));
         write_mytty(at_command_d);/*向终端写入命令 AT+CMGS=<Length><CR>  (CR的IRA为13)*/
         
       
        
         printf("waiting for data request.\n");
         read_mytty(at_command_d,ack_buff);

         if(!strncmp(ack_buff,">",1)){
                printf("sending the pdu data...\n");
               
                if(write(mytty,pdu_buff,strlen(pdu_buff))!=strlen(pdu_buff)||write(mytty,"\26",1)!=1){
                      printf("error on sending data.\n");
                      exit(1);
                    }/*向终端写入pdu<ctrl+z>  (ctrl+z 的IRA 为26)*/
        read_mytty(at_command_d,ack_buff);
        printf("the respone is :%s\n",ack_buff);
    }
        .
    .
    .                                                                                                                      
void create_smssubmit_pdu(char *pdu)
{
        char number[]="683175428705F3";
        char buff[]="E8329BFD4697D9EC37";
                                                                                                                             
        memset(pdu,0,sizeof(pdu));
        sprintf(&pdu[strlen(pdu)],"%02X",0);
        sprintf(&pdu[strlen(pdu)],"%02X",17);
        sprintf(&pdu[strlen(pdu)],"%02X",0);
        sprintf(&pdu[strlen(pdu)],"%02X",13);
        sprintf(&pdu[strlen(pdu)],"%02X",145);
        sprintf(&pdu[strlen(pdu)],"%s",number);
        sprintf(&pdu[strlen(pdu)],"%02X",0);
        sprintf(&pdu[strlen(pdu)],"%02X",0);
        sprintf(&pdu[strlen(pdu)],"%02X",167);
        sprintf(&pdu[strlen(pdu)],"%02X",10);
        sprintf(&pdu[strlen(pdu)],"%s",buff);
}
creat_smssubmit_pdu产生的pdu如下:
    00 11 00 0D 91 683175428705F3 00 00 A7 0A E8329BFD4697D9EC37 (其中的空格仅仅为了方便查看,实际是没有的)
同样我也用11位电话号码来组织(省去前面的86),如下:
    00 11 00 0B 91 3175428705F3 00 00 A7 0A E8329BFD4697D9EC37
但是当我发送完命令AT+CMGS=<length><CR>后,要等至少十秒才会出现simens 6618给出的回应">",此时发送pdu,结果不论我怎么组织pdu中各个分组6618总是给出"ERROR",而且没有给出错误号.
知道为什么吗?

回复列表 (共2个回复)

沙发

厉害的说,但是你是否要有电信提供的sms网关?否则怎么发呢?我是希望写这个,但是没有网关。

板凳


楼上的,代码给全了好不好,这支离破碎的片断也太刻小气吧!
谢谢![em16]

我来回复

您尚未登录,请登录后再回复。点此登录或注册