sfer Control 6.0,所以你需要在Delphi中Import类型库MSINET.OCX。在INET98.CHM帮助文件里面可以找到更多信息。这个控件用起来很简单,在我们的例子中也只需要一行代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption :=
inet1.OpenURL(''http://localhost/scripts/webcalc.exe?x=''+Edit1.Text+''&y=''
+Edit2.Text);
end;
控件向服务器发送请求,并且接收回答。OnStateChange事件允许我们得到操作的详细信息:
procedure TForm1.Inet1StateChanged(Sender: TObject; State: Smallint);
begin
case state of
icResolvingHost: statusbar1.Panels[0].Text :=
(''寻找指定服务器的IP地址。'');
icHostResolved: statusbar1.Panels[0].Text :=
('' 成功找到IP地址。'');
icConnecting: statusbar1.Panels[0].Text :=
('' 正在连接到主机。'');
icConnected: statusbar1.Panels[0].Text :=
('' 成功连接到主机。'');
icRequesting: statusbar1.Panels[0].Text :=
('' 发送请求。'');
icRequestSent: statusbar1.Panels[0].Text :=
('' 成功发送请求。'');
icReceivingResponse: statusbar1.Panels[0].Text :=
(''接收主机回应。'');
icResponseReceived: statusbar1.Panels[0].Text :=
('' 成功接收到主机回应。'');
icDisconnecting: statusbar1.Panels[0].Text :=
('' 从服务器断开。'');
icDisconnected: statusbar1.Panels[0].Text :=
(''成功从服务器断开。'');
icError: statusbar1.Panels[0].Text :=
(''与服务器通讯发生错误。'');
icResponseCompleted: statusbar1.Panels[0].Text :=
(''The request has completed and all data has been received'');
end;
end;
图一:客户端
客户端应用
程序做好了。它不自己做计算工作,而是依靠Webcalculator服务器完成任务。我们的Web services可以为任何人提供服务……下一个例子稍微高级些:使用XML传递变量。XML连初学者也应该掌握,它不过是储存和交换数据的一种标准格式而已。这回我用TNMHTTP的Post方法(在Delphi的FastNet控件组):
Web.Post(''http://localhost/scripts/webCalc.exe'','' ''+strX+''+strY+'');
这个命令做了所有工作,不同之处在于它用来传递结构化了的XML文档。服务器需要解析XML。这是我们需要另一种技术:Charlie Calvert在《Delphi中的XML解析》种作了详细说明。我将用MSXML.DLL库来做服务器端XML解析。你需要import这个Microsoft库到Delphi中。同样,在OnAction事件中加入代码:
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean(;
var
doc : IXMLDOMDocument;
ElemList: IXMLDOMNodeList;
x, y:integer;
begin
Doc:= CreateOleObject(''Microsoft.XMLDOM'') as IXMLDOMDocument;
Doc.loadXML (Request.ContentFields.Text );
&nb