procedure Thread_Smsg.ManageMsgLst;
var
chd,i,j:integer;
str,tel,stime,fsnr,sqlstr,fszt,msgid:string;
//PDU数据,电话,发送时间,发送内容,SQL语句,发送状态,顺序号
begin
j:=0;
i:=0;
while Msg_Lst.Count>0do
//有待处理的短信
try
strlst.Text:=Msg_Lst[0];
Msg_Lst.Delete(0);
//if pos('+CMGS:',strlst.Text)>0 then
//是发送短信后返回的顺序号
// begin
// msgid:=copy(strlst[1],pos(' ',strlst[1])+1,length(strlst[1])-pos(' ',strlst[1]));
// sqlstr:='select Msgid from SJ_YHLYB '
// end
if pos('+CDS:',strlst.Text)>0 then
//是信息报告
begin
while i<strlst.countdo
begin
if pos('+CDS:',strlst) <> 0 then
begin
j:=i;
i := strlst.count;
end
else
inc(i);
end;
try
chd:=strtoint(copy(strlst[j],pos(' ',strlst[j])+1,length(strlst[j])-pos(' ',strlst[j])));
except
exit;
end;
if chd>0 then
begin
chd:=chd*2;
//str:=copy(strlst[2],length(strlst[2])-chd+1,chd);
str:=copy(strlst[j+1],length(strlst[j+1])-chd+1,chd);
TransMsgReport(str,msgid,tel,stime,fszt);
if fszt='00' then
//发送成功
begin
stime:=copy(stime,1,8);
//发送时间和记入系统的时间有可能有误差,只取天
sqlstr:='update SJ_YHLYB set LYZT=''1'' where LYDX='''+tel+''' and substring(LYSJ,1,8)='''+stime+'''';
//将用户留言(信息发布)表中留言状态改为已接收
executesql(dm_public.qry_tmp,sqlstr,1);
end;
end;
end
else
if pos('+CMT:',strlst.Text)>0 then
//是新短信
begin
try
chd:=strtoint(copy(strlst[1],pos(',',strlst[1])+1,length(strlst[1])-pos(',',strlst[1])));
except
exit;
end;
if chd>0 then
begin
chd:=chd*2+18;
//是否直接截取18位`或者需要先判断短信中心号码的类型和长度?
str:=copy(strlst[2],1,chd);
TransReceiveMsg(str,tel,stime,fsnr);
myMsgReceived(tel,fsnr,stime,dm_public.qry_dx1,dm_public.qry_dx_yw);
//调用短信接收处理过程
end;
// if
end;
// else
else
if pos('+CMTI:',strlst.Text)>0 then
// 把短信存放到存储器中去了
begin
end;
except
end;
end;
这个是程序中的短线线程中的代码,就是判断接收的是什么短信:新短信,信息回报