当前位置:主页>仓库管理软件> 列表

如何用程序发短信,200分奉上,求具体解决办法。

销售管理软件版1楼: 如何用程序发短信,200分奉上,求具体解决办法。

2楼: 参见: http://www.sms2008.net
下载: http://www.sms2008.net/files/KoSMSGateWay_V2006.rar
通过Outlook收发短信演示: http://www.sms2008.net/files/Outlook_Demo.rar
通过Foxmail收发短信演示: http://www.sms2008.net/files/Foxmail_Demo.rar

现成产品,无需自已再花精力做了。 如免费仓库进销存软件

3楼: 通过串口用AT指令控制Gsm Modem来收发短信。 我做过不少。

4楼: 谢谢,我也相知道

5楼: 可以调用网上公用的Webservices,利用Webservices组件来实现,我只知道移动的

6楼: 我有写好的源码,想要可以找我,

销售管理软件版7楼: to mmyl:我的QQ:50887403 你的多少?

8楼: to haogui0:能不能给我一个例子,先谢了,哥们。

9楼: 1.有些网站提供这种短信服务.可以用程序连过去发短信,基本上都要付费,优点是不需要别的附加设备,缺点是用网上的网址发送有时有发送方式经常改变的现象,不稳定,需要经常改程序.
2.用专用的发送设备连接PC,此设备插普通手机卡.优点是只要手机卡里有钱,就能发出去,稳定.缺点:需要专用的发送设备.

10楼: to piaosiy:只要例子。

11楼: 网站的不行了,现在。

12楼: 目前手机短信息的应用越来越广泛,互联网上提供短信息发送的站点也越来越多,但一些站点的服务并不尽如人意,往往发出去的短信息石沉大海。最可靠的发送方法当然是用手中的手机了,如果设置了状态报告,更能确切知道对方是否收到了此条信息。手机发送尽管比较可靠, 但也存在输入麻烦、效率低的问题。本文介绍一种方法,只要手机能够与电脑相连(通过红外端口或用手机数据线连接串行口,同时手机支持GSM AT指令集),就可以通过自行编制的短信息发送软件,实现短信息的发送。




现在市场上的大多数手机均支持类似于Modem控制的GSM AT指令集,该指令集是由诺基亚、爱立信、摩托罗拉和HP等厂家共同为GSM系统研制的,其中包含了对SMS(Short Message Service)的控制。
GSM AT相关指令的介绍
与SMS有关的GSM AT指令如表1所示:

表1 相关的GSM AT指令
对SMS的控制共有三种实现途径:
Block Mode;
基于AT命令的Text Mode;
基于AT命令的PDU Mode。
Text Mode比较简单,多款诺基亚手机均支持该模式。西门子的手机大多只支持PDU模式,PDU模式是发送或接收手机SMS信息的一种方法,短信息正文经过十六进制编码后被传送。目前,PDU已取代Block Mode,因此本文主要探讨PDU模式的发送。
计算机和手机的通信
本文以西门子 S3568i为例,介绍如何实现短信息的发送。
数据线连接
首先,通过S35/25数据线将手机与电脑串行口相连。然后,打开超级终端,选择直接串行口连接,端口参数设为19200速率、无校验、数据位8、停止位1。
红外线连接
如果使用带红外端口的计算机,可以设置与手机的无线连接。首先确认计算机红外端口已打开,并将手机的红外线和收传真/数据功能打开,对接红外端口,计算机系统托盘上应当出现一个红外设备西门子S35(如果没有安装红外监视器,则不显示)。然后,打开超级终端,选择IrDa上的串行口。
连接测试
点击超级终端工具条上的呼叫按钮,输入AT并回车,屏幕上如果出现OK则表明计算机与手机的连接成功,这时就可以输入各类GSM AT指令了。
如:查询手机厂家,输入AT+CGMI=,屏幕显示Siemens。
通常情况下,执行测试命令AT+CMGS=?,如果返回OK,表明手机支持此指令。该指令的完整语法格式如下:
If PDU mode (+CMGF=0)+CMGS=PDU is given
如果短信息格式指令AT+CMGF返回的是0,则SMS格式为PDU模式,再执行AT+CMGS=<数据长度>命令后,手机返回“>”符号并等待输入,输入PDU数据并以^Z或Esc键结束。
如果信息发送成功,则返回OK,并显示信息号:
+CMGS:
如果发送失败,则返回如下信息:
+CMS ERROR:
PDU数据格式的分析
下面通过对存储在手机中的待发信息的分析,来介绍SMS PDU的数据格式。首先,用手机写一条短信息,发送手机号码为13605696031,信息内容为“Hello World!”。通过执行AT+CMGL=2可以读出此条信息。
操作过程如下(斜体字符为响应信息,{}内为注释):
AT
OK
AT+CMGL=2 {读未发短信息}
+CMGL: 1,2,,24 {1表示信息个数,2表示未发信息,24表示信息总容量}
08 91 683108501505F0 11 00 0B 81 3106656930F1 0000A7 0B E8329BFD06DDDF723619
OK 
下面分析这条信息:
08:短信息中心地址长度。
91:短信息中心号码类型,91是TON/NPI。TON/NPI遵守International/E.164标准,指在号码前需加‘+’号;此外还可有其他数值,但91最常用。
683108501505F0:短信息号码,是所使用的服务中心地址。由于位置上略有处理,实际号码应为:8613805515500(字母F意指长度减1),这是作者所在地GSM短信息中心的号码。
11:文件头字节(header byte,是一种bitmask)。这里11指正常地发送短信息。
00:信息类型。
0B:被叫号码长度。
81:被叫号码类型。
3106656930F1:被叫号码,也经过了移位处理,实际号码为13605696031。
0000A7:短信息编码类型GSM Default Alphabet,如为中文则是000010。
0B:短信息长度。
E8329BFD06DDDF723619:短信息内容“Hello World!”。
短信息的编码方法及编程实现
下面我们介绍纯英文和纯中文的信息编码方法。通过测试我们发现,每条发送的短信息前面部分均相同,只是被叫号码和短信息内容有变化。
1.英文编码
参见表2,设短信息内容为“Hello World!”。缺省的GSM 字符集为7位编码,可以简单地理解为ASCII码(ASCII值小于80Hex,因此,Bit8被忽略),依次将下一7位编码的后几位逐次移至前面,形成新的8位编码,参见表2箭头指示。需要注意的是第9行,移位计数已达7位,则直接将本编码前加0。GSM并非支持所有的ASCII字符显示。


表2 英文编码的实现过程

下面是实现英文编码的部分Delphi 5代码:
//英文格式编码,s为String
function Encode1(var s:String):String;
var
i,j,len:Integer;
cur:Integer;
t:String;
begin
Result:=‘’;
len:=Length(s);
//j 用于移位计数
i:=1;j:=0;
while i<=len do
begin
if i//数据变换
cur:=(ord(s[i]) shr j) or ((ord(s[i+1]) shl (7-j)) and $ff)
else
cur:=(ord(s[i]) shr j) and $7f;
FmtStr(t,‘%2.2X’,[cur]);
Result:=Result+t;
inc(i);
//移位计数达到7位的特别处理
j:=(j+1) mod 7;if j=0 then inc(i);
end;
end;  
2.中文编码
参见表3,设短信息内容为“中文短信息”。中文短信息的实现较简单,只需将GB2312的中文编码转换为代码页为CP936的Unicode编码即可。
表3 中文编码的实现过程

通过Delphi的WideString类型转换,可以巧妙地实现GB2312到Unicode的编码转换(注意代码页和操作系统相关联)。下面是实现中文编码的部分Delphi 5代码:
// 中文格式编码,s为Unicode String
function Encode2(var s:WideString):String;
var
i,len:Integer;
cur:Integer;
t:String;
begin
Result:=‘’;
len:=Length(s);
i:=1;
while i<=len do
begin
cur:=ord(s[i]);
//BCD转换
FmtStr(t,‘%4.4X’,[cur]);
Result:=Result+t;
inc(i);
end;
end;
小 结
以上介绍了PDU格式的短信息编码。建议英文信息长度不超过140个字符,中文信息不要超过54个汉字。如果使用能够支持文本方式的手机进行发送,实现起来更简单。如发送“Hello World!”,用如下的AT指令即可:
AT+CGMF=1AT+CGMS=“13605696031”,129
>Hello World!<^Z> 如进销存管理系统分析

13楼: TO piaosiy:
''超级终端工具条;''是什么?

销售管理软件版14楼: TO piaosiy:
有没有例子。

15楼: 这个只是 windows自带的一个小工具.按 开始 - 程序 - 附件 - 通讯 - 超级终端.
程序发送只需要把已编码数据填入已连接好发送设备的串口就行了.

16楼: TO piaosiy:
哥们有例子没有。

17楼: 发短信重要的是要清楚这个PDU格式,你只要弄清楚怎么编码就会发了,给你源程序显然是不行的.

18楼: 用MSComm1组件开发吗?

19楼: TO piaosiy:
你有QQ吗,细谈一下。

20楼: MSComm1这个也行,我用的是另外的.不过你要买专用的短信发送设备,也就是GSM MODEM.

销售管理软件版21楼: 用手机不行吗,数据线和手机相连,手机带的软件就可以在电脑上发短信。

22楼: 抱歉,不方便使用QQ. 如进销存免费版

23楼: 另外还有其它办法吗,调用网上的,通过程序发短信。

24楼: 两种办法;
1 通过网关
2 通过GSM-modem

25楼: 用手机发不行的....至少一般的手机不行.

26楼: 我的手机是MOTO的,它带的MPT软件,可以管理手机里的东西,而且还可以发短信。

27楼: 前面我说过,有些网站提供这种服务,不要GSM MODEM ,不过调用方式经常改,不稳定.

销售管理软件版28楼: 用网关的现在不行了吧。得有验证码。

29楼: TO piaosiy:
电脑没有上网,把手机用数据线连上,用手机随机带的软件,通过手机发短信,不是用网络。你不知道。

30楼: 来自:pyzhx801225, 时间:2005-10-11 15:53:30, ID:3233744
我的手机是MOTO的,它带的MPT软件,可以管理手机里的东西,而且还可以发短信。

如果你说你的行,可以使用超级终端发条短信看看就知道能不能发了.
以下是超级终端使用命令:
几个AT指令介绍:

1 AT+CREG? 查询是否入网,0,0为未入网;0,1为入网;0,2为搜索网络
2 AT+CMGF 短消息格式 1为文本方式,0为PDU方式
3 AT+CSCA? 读取中心号码
4 AT&F 恢复出厂设置
5 AT+CGMI 厂家标识
6 AT+CGMM 模块标识
7 AT+CGMR 软件版本号
8 AT+CMGR=[index] 读取指定位置的短消息
9 AT+CMGL=4 或AT+CMGL=”ALL” 读取所有短消息
10 AT+CMGD=[index] 删除指定位置短消息
11 ATD********; 拨号
12 ATH 挂断电话

短消息发送示例(文本方式)
格式: AT+CMGs="对方电话号码" 回车.等出现 ">"好后接着输入内容,最后,以^Z结束.
AT+CMGs="13621972122" 回车.
> (输入内容)021-63222149^Z
+CMGS: 198
OK

31楼: 来自:pyzhx801225, 时间:2005-10-11 15:59:21, ID:3233761
TO piaosiy:
电脑没有上网,把手机用数据线连上,用手机随机带的软件,通过手机发短信,不是用网络。你不知道。

如果你认为可以,你用我上面给你的发一下试试就知道了.如果真是可以就能发出去.

32楼: 下面是我的手机活动记录。


16:03:54,42 Modem State ConnectTapi = 2
16:03:54,70 #### Testing mobile state...
16:03:54,76 --> ATE0
16:03:54,90 <-- ATE0
16:03:54,92 <-- OK
16:03:55,03 --> AT+MODE=0
16:03:55,12 <-- OK
16:03:55,17 --> AT+MDBL=0
16:03:55,26 <-- OK
16:03:55,31 --> AT+CGMI;+CGMM;+CGMR;+CGSN
16:03:55,45 <-- +CGMI: "Motorola CE, Copyright 2000"
16:03:55,48 <-- +CGMM: "GSM900","GSM1800","GSM1900","GSM850","MODEL=C350"
16:03:55,51 <-- +CGMR: "R312ULSAS_G_09.10.29R"
16:03:55,54 <-- +CGSN: IMEI352587004132395
16:03:55,56 <-- OK
16:03:55,92 --> AT+CSQ;+CBC
16:03:56,06 <-- +CSQ: 21,99
16:03:56,07 <-- +CBC: 0,20
16:03:56,09 <-- OK
16:03:56,54 --> AT+CPMS="IM"
16:03:56,64 <-- +CPMS: 28,88
16:03:56,65 <-- OK
16:03:56,76 --> AT+CPBS="ME"
16:03:56,90 <-- OK
16:03:56,95 --> AT+CPBR=?
16:03:57,09 <-- +CPBR: (1-100),40,24
16:03:57,10 <-- OK
16:03:57,15 --> AT+CPBS?
16:03:57,25 <-- +CPBS: "ME"
16:03:57,26 <-- OK
16:03:57,50 --> AT+CPBS="SM"
16:03:57,59 <-- OK
16:03:57,64 --> AT+CPBR=?
16:03:57,78 <-- +CPBR: (101-300),40,13
16:03:57,79 <-- OK
16:03:57,84 --> AT+CPBS?
16:03:57,93 <-- +CPBS: "SM"
16:03:57,95 <-- OK
16:03:58,12 --> AT+CPBS="ME"
16:03:58,21 <-- OK
16:03:58,26 --> AT+CPBS?
16:03:58,40 <-- +CPBS: "ME"
16:03:58,42 <-- OK
16:03:58,53 Wait...
16:03:59,17 --> AT+CGATT?
16:03:59,31 <-- +CGATT: 0
16:03:59,32 <-- OK

33楼: 我的代码,你看看是不是有问题。

procedure TForm1.Button1Click(Sender: TObject);
var
cmd:string;
i,j:integer;
ba:array of byte;
cnReturn:string;
begin
//清空接收缓冲区
cnReturn:=''#13'';
comm.InBufferCount:=0;
comm.InputLen:=0;
//设置短讯中心号码
/////comm.output:=''AT+CSCA=+8613800371500''+cnReturn;
/// sleep(1000);
memo1.Lines.add(comm.input);
//检查是否支持sms服务
comm.output:=''AT+CSMS=0''+cnReturn; !!!!!!!!!!!!!!!!!!!!!!!!这一部出错了。
sleep(1000);
memo1.Lines.add(comm.input);
//设置modem为pdu模式
comm.output:=''AT+CMGF=0''+cnReturn; //Set PDU mode
sleep(1000);
memo1.Lines.add(comm.input);
//设置字符集
cmd:=''AT+CSCS="GSM"''+cnReturn;
comm.output:=cmd;
sleep(1000);
memo1.Lines.add(comm.input);

//开始发命令长度为17
comm.output:=''AT+CMGS=17''+cnReturn;
sleep(1000);
memo1.Lines.add(comm.input);

//下面是设置pdu包数据,这里为一个固定的包,它在超级终端里测试过正常
cmd:=''0891683108801505F011000D91683188053864F4000800044E2D''+''1A'';
//这个包中每两位为一个字节,把他们放到一个字节数组中
setlength(ba,length(cmd) div 2-1);
i:=1;
j:=0;
while i begin
ba[j]:=strtoint(''$''+cmd[i]+cmd[i+1]);
inc(j);
inc(i,2);
end;
//把pdu包送给modem
comm.Output:=ba;
sleep(1000);
memo1.lines.add(comm.input);
end;

34楼: 你用超级终端往外发短信试试,或者你读一条短信,可以就没问题.

销售管理软件版35楼: 我点‘超级终端’一打开就出了个新连接不会用。

36楼: AT+CMGs这个不行,其它的部分可以,是不是,指令不一样。

37楼: 这样吧,你去看看你的手机说明书,看看有没有相关的连接说明,如果没有的话估计就不行.

38楼: 你把这几条命令结果发上来看看
1 AT+CREG?
3 AT+CSCA?
8 AT+CMGR=1

39楼: 请参见WWW.ENSMS.COM 这个网站可提供接口

40楼: AT+CMGW="电话号码"6CA16709<1A>我的手机说明是这样发。

41楼: TO piaosiy:
先谢谢你了,我等会再试试,你我QQ发给我行不。你水平不错,可以作朋友。
我的EMAIL:pyszx@tom.com

销售管理软件版42楼: 来自:pyzhx801225, 时间:2005-10-11 16:25:39, ID:3233829
AT+CMGW="电话号码"6CA16709<1A>我的手机说明是这样发。

有这样的说明的话估是可以发的,呵呵,AT+CMGW这个只是发送命令不同而已,只要能发就行.

43楼: 你先试试用text格式发行不行?
把你的pdu码发一下,我看你的程序中的长度不对

44楼: 谁用过MSComm1组件,在超级终端上可以发短信了,可是在程序里不知道怎么用,我的手机线是USB口的。

45楼: 偶这里有完整的例子!~

但是没看过!~~

46楼: 有哪位高手知道,怎么向串口发这些指令。

47楼: 我的手机是USB连接的。

48楼: 用usb口的话,电脑的默认串口是com3,能不能打开com3?
如果能的话,就可以发送了指令了
MSComm没有用过,不过流程是这样的设置参数(com3,9600等),打开串口,写串口(发送at命令)

销售管理软件版49楼: 调用http://smsinter.sina.com.cn/ws/smswebservice0101.wsdl这个webservices,如果是d7可直接调用,如果是d6,要打sp2补丁,利用webservice组件就可实现,下面是源码:
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Text:=getsmswebservicesoapport.sendXml(edit1.Text,edit2.Text,edit3.Text,edit4.Text,edit5.Text,''text'');
end;
这是发送事件的源码

50楼: to mmyl:
现在没法注册用户名了吧,用哪个组件调用这个文件,各个edit代表的内容是什么?请这位朋友说的详细一点,一定把高分奉上。

51楼: pyzhx801225 加我吧QQ:185597150,我给你个我自己写的demo,实现了移动,连同,小灵通互发,状态报告,闪信,wap push等所有功能。呵呵。速度快,效率高,稳定。呵呵。

52楼: http://www.delphibbs.com/delphibbs/dispq.asp?lid=3220300

53楼: 郁闷啊,这个技术,现在真的很难吗?

54楼: 有没有朋友知道怎么用网关发短信,并有例子,我把200分都给他,如果不够,还可以再加点分。

55楼: .........你还没解决啊