如何用程序向手机发短消息--[高手请进](100分)

  • 主题发起人 主题发起人 odbc1230
  • 开始时间 开始时间
我也在研究,英文短信没问题,中文短信需要nokia8310货以上的手机。
有什么消息告诉我阿,共同进步。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1425189
 
在类似问题中已答过:
联通:将短信息发给思特奇网关,用SGIP协议。(当然你的Computer得能访问到思特奇网关)
移动:将短信息发给移动短信网关,用SMPP协议。
另一种方法通过GSM模块发(得花钱),DELPHI-串口-GSM模块-下发短信息。
再有如果手机提供与PC的接口且能能搞到接口通讯协议,就很简单了:
DELPHI-串口-专用连接线-手机-下发短信息。
 
更正一下:
发给移动短信网关,用CMPP协议。
 
以前很多免費的軟件是用ICQ的網關!
但現在ICQ的不能發送到移動的手機,好象是因為資費間的問題!

如果不是想做免費的,那麼你和移動、聯通聯系!他們會提供接口的1
 
CSDN上的哥们估计是我们移动内部人,呵呵
不然早就给他封了接口了
 
我以前做过一个在网站群发的
其实只要
参考这个,先登陆
Button20.Caption:='正在登陆...';
WebBrowser1.Navigate('http://reg4.163.com/in.jsp?username='+Edit_username.Text+'&password='+Edit_password.Text);
然后根据发回的网叶内容判断是否登陆成功。用别的控件也行啊。
//('http://sms.163.com/service/sendmsg_pop.php?send=1&phone=13XXXXXXX&message=您的学识让我们钦佩,您的为人让我们折服,您的节日让我们共同庆祝!老师,节日快乐!');
然后根据发回的网叶内容判断是否发送成功。
也就是说你只要在ie的地址栏打一句话,就可以发送过去了。你的手机号要在那个网站注册哦。

判断的内容如
{
信息内容不能为空
发送失败rtn=6&Error:illegal
接收的第1个号码位数不对!
时间设置不对
预定时间最长为现在起10天内!
预定时间不可少于当前时间
发送成功!接收不到不收费。
}
用串口的话,我还没处理好汉字分割问题
 
www.gmcc.net有华为的api
 
还是通过计算机跟手机连接起来发方便些
手机的有跟计算机连的线
 
总的来说,那些能发短信的网站都是和移动、联通有协议的。
如果你要自己做,不外乎两条路:
1、访问这种可以免费发短信的网站。你的程序通过HTTP协议连到这些网站上,借用它们的服务帮你发;
2、你去跟移动、联通谈好,签订一个协议。
 
用Delphi实现BP机、手机短讯
  一、原理

  它不同于OICQ的双方都在网上才能进行交流的寻呼功能,它可以将文字信息发送到真正的寻呼机上。只要你能够上网,就可以自己动手,
随时随地将信息发送出去,即使你在国外,也可以利用它来向国内的友人发送信息了,而且不用交纳国际长途费用!

  二、分析

  现在网上各寻呼台都有网上服务,网页寻呼(Web Paging)就是常用的一种。它是通过在互联网上访问寻呼台的主页,
然后由寻呼台的信息寻呼系统打传呼。所以我们只要利用HTTP协议就可以实现网络寻呼了。以下就简单介绍一下HTTP协议: HTTP中完成一个会话通常要完成:

  1)客户端程序与服务器建立连接

  2)发送请求

  3)服务器响应客户端

  4)关闭连接

  HTTP常用到的请求有:

   1)GET(请求一万维网页)

   2)HEAD(读取一万维网页的头部)

   3)PUT(请求一存储万维网页)

   4)POST(附加一个命名的资源)

   5)DELETE(删除万维网页)

   6)LINK(连接两个已有的资源)

   7)UNLINK(断开两个已有资源的连接)

  HTTP中常用到的应答状态代码有:(*号代表0-9间的一个数)

   1. 1** (信息)

   2. 2**(成功)

   3.4**(客户端错误)

   4.5**(服务器错误)

其实我们要实现的程序,只用POST、GET请求,收到正常应答就可以了。POST可以用于把用户输入的数据以数据流的方式传给CGI程序,CGI通过Contect-Length环境变量来取相应长度的数据流信息。

  POST请求格式如下:

  POST http://www2.scuta.edu.cn/stu/chatroom/check.asp HTTP/1.0

  Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*

  Referer: http://www2.scuta.edu.cn/stu/

  Accept-Language: zh-cn

  Content-Type: application/x-www-form-urlencoded

  Proxy-Connection: Keep-Alive

  User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)

  Host: www2.scuta.edu.cn

  Content-Length: 87

  Pragma: no-cache

  Cookie: ASPSESSIONIDQGGGQHHE=ABGNNOJCIGOFCDLBIOLHKAFK

  服务器正常应答的头部结构为:

   200 OK HTTP/1.0 说明提交数据成功

  三、程序的实现

  Delphi中NMHTTP已经可以很容易的实现上面的所说的数据提交,而且它还支持Proxy、这样对于通过代理服务器上网一样可以适用,并且它不是OICQ中发送讯信所用到SOCKET5代理。

  新建一个窗体,加入组件一个ComboBox,命名为callto,用于存放寻呼对象,如国信寻呼就有95908、94908、94909、98062、98063、98019、98035、98052、98038、99055、98060、98061、98051、98003、99062、99016、99017、99018、99019、99046、99076;加入组件Edit,命名为tonumber,表示寻呼号码;加入组件RadioGroup,命名为RadioGroup1,Caption设为呼机类型,items中加入两项,分别为中文机、数字机;加入组件Edit,命名为firstName,用于表示发寻呼人的姓;加入组件RadioGroup,命名为RadioGroup2,Caption设为寻呼人性别,items中加入两项,分别为先生、小姐;加入组件Memo,命名为callmsg,用于输入发送的信息(注:对于数字机只能是数字信息);加入组件NMHTTP,命名为NMHTTP1;加入Checkbox,命名为ifuseproxy,用于确定是否使用代理服务器;加入两个Edit组件,分别用于软件代理服务器地址、代理服务器端口;最后加入命令按钮,Caption设为“发送”。

  现在以国信寻呼为例,它用GET请求就可以实现了,“发送”按钮的程序代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var callstr:string;
begin callstr:='http://tips.gxspace.com/cgi-bin/tips/webpaging?stn_id='+callto.Text+'&page_no='+tonumber.Text;
case RadioGroup1.ItemIndex of
0:callstr:=callstr+'&pager_type=C';
1:callstr:=callstr+'&pager_type=N';
end;
callstr:=callstr+'&firstname='+firstname.text;
case RadioGroup2.ItemIndex of
0:callstr:=callstr+'&title=0';
1:callstr:=callstr+'&title=1';
end;
callstr:=callstr+'&msg='+callmsg.Text+'&answer=null&B1=发送寻呼';
NMHTTP1.InputFileMode := FALSE;
NMHTTP1.OutputFileMode := FALSE;
NMHTTP1.ReportLevel := Status_Basic;
If ifuseproxy.Checked then
Begin
NMHTTP1.Proxy := Edit1.Text;
NMHTTP1.ProxyPort := StrToInt(Edit2.Text);
End;
NMHTTP1.Get(callstr);
end;


 有些寻呼(如润迅寻呼就不能用上面的GET请求实现,它要用POST请求),使用与上面相差不大,如下面是NMHTTP的POST用法:

NMHTTP1.InputFileMode:=False;
NMHTTP1.OutputFileMode:=True;
NMHTTP1.ReportLevel:=Status_Basic;
If ifuseproxy.Checked then
Begin
NMHTTP1.Proxy := Edit1.Text;
NMHTTP1.ProxyPort := StrToInt(Edit2.Text);
End;
With NMHTTP1.HeaderInfo do
Begin
Cookie := Edit5.Text;
LocalMailAddress := Edit6.Text;
LocalProgram := Edit7.Text;
Referer := Edit8.Text;
UserID := Edit9.Text;
Password := Edit10.Text;
End;


// 把要提交的数据先放在test.txt文件中:格式为stnid=A&pageno=123456....

NMHTTP1.Post('http://www.wocall.com/script/zbwebcall.asp','test.txt');

file://NMHTTP的具体用法在Delphi安装目前/Borland/Delphi5/Demos/FastNet/Http下有个NMHTTP使用的例子。

  以上都是用NMHTTP实现的,其实用Delphi中的WebBrowser组件同样可以完成数据的提交,使用是这样的 Webbrowser1.OleObject.Document.FrontPage_Form1.submit();

  说明:WebBrowser1是WebBrowser组件的名,Frontpage_Form1是用WebBrowser打开的网页中的表单名

  网页中的表单是这机样的:

<FORM action=http://message.com.cn/cgi-bin/ips/webpaging method=post name=FrontPage_Form1>
.......
</FORM>


这样的实现方法就是用程序生成一个已经按用户输入信息生成一个网页,
然后通过WebBrowser1.Navigate(生成的网页),最后提交到服务器Webbrowser1.OleObject.Document.FrontPage_Form1.submit();
这样就完成了一次寻呼

 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1528439
 
现在通过编程实现收发无非三种情况
1、直接通过irDA或者串行口和手机直接相连,通过相应的控制完成短信的收发,支持
siemens3618,6618的手机工作室就是可以这样发,资费和手机发送短信一样。
2、通过部分主页上提供的短信发送的HTTP连接,将短信息以HTTP方式,提交给相应的
服务器,该服务器负责将短信发出。这种就看服务器是否给你免费了。
3、直接通过CMPP连接移动的短信网关,通过SOCKET向短信网关提交。但是移动必须给你
开设帐号,绑定IP。cmpp中的计费可以在用户提交时候设置,但是SMPP中好像是在短信
网关中设置多,所以如果你连接的是支持SMPP的短信平台,就算连起可以发送也不是免费
的。
还有没有其他的方法,我只知道这些了
 
谁要是能提供一个好的全程实例就好了。。。
 
需要移动或联通的网关!!然后网上有相关的例子!
 
各位要看清楚题再发言阿
要求是通过程序控制手机发送短信,而不是通过网络和移动网关。
就是短信是通过手机发送出去的
 
最简单的方法是通过串口用AT命令控制手机不过要自己读懂PDU协议,我做过一个。如果有什么
问题可以直接找我。
 
to pichup:
可否发个demo(源码)过来看看,以后有什么需要帮忙,一定全力以赴[:)]

mail:cxz@gsta.com
 
343用的是连接手机发送了,我就见过这个了.
 
后退
顶部