spcomm 短信问题!!!贴出已有代码,求教另一个代码!(在线等待....)(25分)

  • 主题发起人 主题发起人 ranyang
  • 开始时间 开始时间
R

ranyang

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个短信收发机,装的移动卡,现在要向装有连同卡定位设备发出定位指令信息,也可以向普通手机发出信息,现在是能向手机发信息:用unicode码解决:
形如:

//将中文转换成Unicode文件进行发送
function TSMSReadSend.AnsiToUnicode(sStr: String): String;
var
i,len: Integer;
cur: Integer;
t: String;
s: WideString;
begin
// WideString('1啊') --> '1啊'
s:= WideString(sStr);
Result:='';
// Length(WideString('1啊')) = 2 !!!
len:=Length(s);
i:=1;
while i<=len do
begin
// Unicode of '啊' --> 21834
cur:=ord(s);
// 21834 --> '554a'
FmtStr(t,'%4.4X',[cur]); // ???? <-- 钱勤
Result:=Result+t;
inc(i);
end;
end;


SmsCenterNum:='3108200705F0'; //短信中心号码
SendSmsNum:=StringSwitch(Mobile);//手机号
Smsint:=length(AnsiToUnicode(trim(str)))div 2;
if Smsint<10 then
begin
SmsUnicode:='0891683108200705F011000D9168'+SendSmsNum+'0008000'+inttostr(Smsint)+AnsiToUnicode(trim(str));
SmsHex:=inttostr(length('11000D9168'+SendSmsNum+'0008000'+inttostr(Smsint)+AnsiToUnicode(trim(str)))div 2);
end
else
begin
SmsUnicode:='0891683108200705F011000D9168'+SendSmsNum+'000800'+IntToHex(Smsint,2)+AnsiToUnicode(trim(str));
SmsHex:=inttostr(length('11000D9168'+SendSmsNum+'000800'+IntToHex(Smsint,2)+AnsiToUnicode(trim(str)))div 2);
end;
if not SMSReadSend.Comm1.WriteCommData(pchar('AT+CMGF=0'+char(13)+char(10)),length('AT+CGMF=0')+2) then
else
begin
sleep(300);
if not Comm1.WriteCommData(pchar(trim('AT+CMGS='+SmsHex)+char(13)+char(10)),length(trim('AT+CMGS='+SmsHex))+2) then
begin
end
else
begin
sleep(200);
if not Comm1.WriteCommData(pchar(SmsUnicode+char(26)+char(13)+char(10)),length(SmsUnicode)+2) then
begin
end
else
begin
AddLog('发送短消息成功,短信内容:'+str);
end;
end;
end;

上面是发unicode信息到手机,但是现在这个设备只支持ASCii代码,怎么处理???
 
function TSMSReadSend.AnsiToUnicode(sStr: String): String;
参数sStr:在定义时最好就定义成 wideString
AnsiToUnicode(trim(str))) 为什么要加个Trim(),短信内容可能因此发生改变!
SmsUnicode:='0891683108200705F011000D9168'+SendSmsNum
11000D91是可变的:
11表示不要状态报告,31表示要状态报告。可设置CNMI实现收取状态报告。
0D是后面手机号的长度。并不一定都是0D呀。如小灵通,特殊号:如01236
91只能发送到手机。81则可以发送到手机和小灵通。
--------------------------
我做的程序可以发送任何字符到手机,只要手机能识别这个字符。
 
这种程序两年前做的,也是用的spcomm,不过自己改装了一些,连上短信猫发短信,不要太爽啊
 
现在我是想发ASCii到一个装有连通卡的定位设备上:主要是一些:
如:
<C001>
的指令。
 
其实就是最简单的发送text的!
不需要进行代码转化!!
 
是GSM模式的吧,跟发短信没有区别啊,只要把定位数据包封装成自己的格式发出去就可以了,然后自己解析啊,不过现在的好像都改GPRS的了,按流量算
 
是呀!上面我实现了PDU格式,现在我要发text mode 用的是GSM模块TC35i短信收发机:

AT+CMGF? 可获得当前 MODE

0 pdu 模式 , 1 text 模式

我要用1 text 模式发出
<C001>
怎么搞????急急急急~~~~~~~~~~~~在线等待
 
我们有现成的短信收发控件源码和现成的短信收发平台例子,有偿转让,需要的话联系我!

QQ:57151728 电话:13395311976
 
现在问题得到解决了!关键是:现在有个问题,我们用PDU 模式中短消息数据又有三种编码方式 , UTF 7, UTF 8, UNICODE ;
UTF 7来解决问题:,但是把发送的字符化为utf 7又难住了我!!!!!!!

utf7

用于处理普通 ASCII 字符 , 主要普通 ASCII 的二进制编码最高位一般为 0. 在 UTF7 下处理 ASCII 字符的时候需要处理补位 . 补位规则 : 将后一字节的从尾取位补在前一字节的头 , 补满 8 位

规则在上面,又没有大人帮我写一个函数!!!!
 
To happycyp
能不能把你的短信发送程序给我一份啊。我也写了一个,但不是很稳定,很多时候不能正常发送出去。我的Email是:ddmlove@126.com
谢了。
 
后退
顶部