| 论坛注册| 加入收藏 | 设为首页| RSS
Google
您当前的位置:首页 > Linux频道 > Linux开发区 > 软件开发

用Delphi实现BP机、手机短讯 精华篇

时间:2006-09-25 12:10:54  来源:赛迪网  作者:

很多人一定用过OICQ,想必也用过了它的BP机短讯、手机短讯,编程的朋友一定想实现这种功能, 34bLinux联盟

如果你的程序能发到手机、发到BP机一定很酷。现在我就介绍一种可行的方法。 34bLinux联盟

一、原理 34bLinux联盟

它不同于OICQ的双方都在网上才能进行交流的寻呼功能,它可以将文字信息发送到真正的寻呼机上。 34bLinux联盟

只要你能够上网,就可以自己动手,随时随地将信息发送出去,即使你在国外,也可以利用它来向 34bLinux联盟

国内的友人发送信息了,而且不用交纳国际长途费用,是不是方便又省事呢! 34bLinux联盟

二、分析 34bLinux联盟

现在网上各寻呼台都有网上服务,网页寻呼(Web Paging)就是常用的一种。它是通过在互联网上访问 34bLinux联盟

寻呼台的主页,然后由寻呼台的信息寻呼系统打传呼。所以我们只要利用HTTP协议就可以实现网络 34bLinux联盟

寻呼了。以下就简单介绍一下HTTP协议: HTTP中完成一个会话通常要完成: 34bLinux联盟

1)客户端程序与服务器建立连接 34bLinux联盟

2)发送请求 34bLinux联盟

3)服务器响应客户端 34bLinux联盟

4)关闭连接 34bLinux联盟

HTTP常用到的请求有: 34bLinux联盟

1)GET(请求一万维网页) 34bLinux联盟

2)HEAD(读取一万维网页的头部) 34bLinux联盟

3)PUT(请求一存储万维网页) 34bLinux联盟

4)POST(附加一个命名的资源) 34bLinux联盟

5)DELETE(删除万维网页) 34bLinux联盟

6)LINK(连接两个已有的资源) 34bLinux联盟

7)UNLINK(断开两个已有资源的连接) 34bLinux联盟

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

1. 1** (信息) 34bLinux联盟

2. 2**(成功) 34bLinux联盟

3.4**(客户端错误) 34bLinux联盟

4.5**(服务器错误) 34bLinux联盟

其实我们要实现的程序,只用POST、GET请求,收到正常应答就可以了。POST可以用于把用户输入 34bLinux联盟

的数据以数据流的方式传给CGI程序,CGI通过Contect-Length环境变量来取相应长度的数据流信息。 34bLinux联盟

POST请求格式如下: 34bLinux联盟

  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
34bLinux联盟

服务器正常应答的头部结构为: 34bLinux联盟

200 OK HTTP/1.0 说明提交数据成功 34bLinux联盟

三、程序的实现 34bLinux联盟

Delphi中NMHTTP已经可以很容易的实现上面的所说的数据提交,而且它还支持Proxy、这样对于通过 34bLinux联盟

代理服务器上网一样可以适用,并且它不是OICQ中发送讯信所用到SOCKET5代理。 34bLinux联盟

新建一个窗体,加入组件一个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, 34bLinux联盟

表示寻呼号码;加入组件RadioGroup,命名为RadioGroup1,Caption设为呼机类型,items中加入两 34bLinux联盟

项,分别为中文机、数字机;加入组件Edit,命名为firstName,用于表示发寻呼人的姓;加入组件RadioGroup,命名为RadioGroup2,Caption设为寻呼人性别,items中加入两项,分别为先生、小姐; 34bLinux联盟

加入组件Memo,命名为callmsg,用于输入发送的信息(注:对于数字机只能是数字信息);加入组件NMHTTP,命名为NMHTTP1;加入Checkbox,命名为ifuseproxy,用于确定是否使用代理服务器;加入两 34bLinux联盟

个Edit组件,分别用于软件代理服务器地址、代理服务器端口;最后加入命令按钮,Caption设为“发送”。 34bLinux联盟

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

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;
34bLinux联盟

有些寻呼(如润迅寻呼就不能用上面的GET请求实现,它要用POST请求),使用与上面相差不大,如 34bLinux联盟

下面是NMHTTP的POST用法: 34bLinux联盟

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;
34bLinux联盟

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

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

file://NMHTTP的具体用法在Delphi安装目前\Borland\Delphi5\Demos\FastNet\Http下有个NMHTTP 34bLinux联盟

使用的例子。 34bLinux联盟

以上都是用NMHTTP实现的,其实用Delphi中的WebBrowser组件同样可以完成数据的提交,使用是这 34bLinux联盟

样的 Webbrowser1.OleObject.Document.FrontPage_Form1.submit(); 34bLinux联盟

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

网页中的表单是这机样的: 34bLinux联盟

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

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

四、结束语 34bLinux联盟

看到这里,该明天网上的BP机、手机短讯是怎么回事了吧!34bLinux联盟

来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
    无相关信息
栏目更新
栏目热门