计算机通过手机发短信息(50分)

  • 主题发起人 主题发起人 fongling5355
  • 开始时间 开始时间
F

fongling5355

Unregistered / Unconfirmed
GUEST, unregistred user!
1. 请问什么手机适合开发计算机通过手机发短信息?
2. 手机如何连接计算机?
3. 开发计算机通过手机发短信息需要注意些什么?
 
我按下面的已经通过。是别人的代码
本文以一个实例来解说AT指令发送PDU短信的全过程,假如我要发送下面的短信:
接收号码:+8613602433649
短信内容:工作愉快!
短信中心号码:+8613800200500

一、短信中心号码处理:用字符串 addr 表示
1、将短信息中心号码去掉+号,看看长度是否为偶数,如果不是,最后添加F
即 addr = "+8613800200500"
=> addr = "8613800200500F"
2、将奇数位和偶数位交换。
=> addr = "683108200005F0"
3、将短信息中心号码前面加上字符91,91是国际化的意思
=> addr = "91683108200005F0"
4、算出 addr 长度,结果除2,格式化成2位的16进制字符串,16 / 2 = 8 => "08"
=> addr = "0891683108200005F0"

二、手机号码处理:用字符串 phone
1、将手机号码去掉+号,看看长度是否为偶数,如果不是,最后添加F
即 phone = "+8613602433649"
=> phone = "8613602433649F"
2、将手机号码奇数位和偶数位交换。
=> phone = "683106423346F9"

三、短信息部分处理:用字符串 msg 表示
1、转字符串转换为Unicode代码,例如“工作愉快!”的unicode代码为 5DE54F5C61095FEBFF01,
(转换函数见最后附录)
2、将 msg 长度除2,保留两位16进制数,即 5DE54F5C61095FEBFF01 = 20 / 2 => "0A",再加上 msg
=> msg = "0A5DE54F5C61095FEBFF01"

四、组合
1、手机号码前加上字符串 11000D91(1100:固定,0D:手机号码的长度,不算+号,十六进制表示,91:发送到手机为91,发送到小灵通为81),
即 phone = "11000D91" + phone
=> 11000D91683106423346F9
2、手机号码后加上 000800 和刚才的短信息内容,000800也写死就可以了
即 phone = phone + "000800" + msg
即 11000D91683106423346F9 + 000800 + 0A5DE54F5C61095FEBFF01
=> phone = 11000D91683106423346F90008000A5DE54F5C61095FEBFF01
3、phone 长度除以2,格式化成2位的十进制数
即 11000D91683106423346F90008000A5DE54F5C61095FEBFF01 => 50位 / 2 => 25

五、所以要发送的内容为
AT+CMGF=0 <回车>
OK
AT+CMGS=25<回车>
> addr+phone <Ctrl+Z发送>

六、如果返回不是ERROR,恭喜你,发送成功了^_^

附录:
function EncodeUniCode(s:WideString):String; //字符串->PDU
var
i,len:Integer;
cur:Integer;
t:String;
begin
Result:='';
len:=Length(s);
i:=1;
while i<=len do
begin
cur:=ord(s);
Result:=Result+IntToHex(Cur,4);
inc(i);
end;
end;

function DecodeUniCode(s:String):WideString; //PDU->字符串
var
p:PWord;
i,len:Integer;
cur:Integer;
TempChar:WideChar;
t:String;
begin
New(p);

Result:='';
len:=Length(s) div 4;
i:=1;

for i:=0 to Len-1 do
begin
t:=Copy(s,4*i+1,4);
p^:=HexToInt(t);

Move(p^,TempChar,2);
Result:=Result+TempChar;
end;
Dispose(p);
end;
 
问题1:带Modem的手机应该都可以
问题2:如果只是手机的话一般通过红外连接,如果采用GSM Dodem的话连接方式就多了,看你选择什么接口;(串口、USB。。。)
 
个人感觉用个gsm 通信猫最好,便宜,且是工业级的,通过串口及AT标准指令就搞定,我现在做成一个模块,可以收/发移动、联通及小灵通的信息,用起来还算方便,我这有一些这方面的资料,需要的话联系我。
本人也是delphi新手,希望能互相学习。qq:50051082
 
你可以看看这个是个开源的手机控制软件,支持电话簿,呼叫,收发短信(中文英文混合支持)
gammu,最新版本1.06,C语言开发的,有dll和命令行两个版本,带有的delphi的单元,我用vc++6.0编译后,使用delphi测试西门子3508I手机,通过串口收发短信(中英混合)成功.
读取电话号码簿成功(不过没有读出姓名字段).
 
GOOD 这是我想要的东西
 

Similar threads

回复
0
查看
861
不得闲
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
886
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部