我在这里有一个类似的问题,但它面向PHP方面.看起来PHP能够接收一个数据包并立即(在同一个会话中)发送和回复.我的问题是Delphi能做到吗?据我所知,答案是一个很大的NO.我需要分两步完成(两个程序).问题是当第一个程序结束时,会话可能会关闭.我可以在两个过程调用之间保持会话打开.
Cos*_*und 12
我要给你两个示例代码PHP
和Delphi
.我们将使用GET
请求方法,因为它更容易,如果您不需要发送太多数据就足够了.我将从PHP
脚本开始,因为它可以单独测试,没有Delphi
应用程序(我们将使用浏览器进行测试).
<?php
$a=$_GET['a'];
$b=$_GET['b'];
echo intval($a)*intval($b);
?>
Run Code Online (Sandbox Code Playgroud)
此脚本需要在URL(a和b)中编码发送的两个值,将值相乘并返回答案.假设您正在运行LAMP的计算机上播放,并且您调用了此脚本script.php
,如果您在浏览器上导航到此脚本:
http://localhost/script.php?a=2&b=3
Run Code Online (Sandbox Code Playgroud)
你会在浏览器中看到这个:
6
Run Code Online (Sandbox Code Playgroud)
要分解我们在浏览器中写入的URL:我们/script.php
从服务器请求页面localhost
,我们将此查询字符串传递给脚本:a=2&b=3
.那去后的东西?
中的URL查询字符串; 所述&
符号分离两个单独的参数=值对:a=2
和b=3
.在PHP端,您$a=$_GET['a']
用来获取参数的值a
.就这么简单!
现在我们知道PHP脚本已启动并运行,我们可以转到Delphi部分.这是一个使用可以想象的效率最低的方法将两个值相乘的例程:
function MultiplyTwoNumbers(a,b:Integer):Integer;
var url: string;
H: TIdHttp;
SS: TStringStream;
begin
// Prepare the URL
url := 'http://fisiere.sediu.ro/script.php?a=' + IntToStr(a) + '&b=' + IntToStr(b);
H := TIdHttp.Create(nil);
try
SS := TStringStream.Create;
try
H.Get(url, SS);
Result := StrToInt(SS.DataString);
finally SS.Free;
end;
finally H.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我故意将正确的工作URL留在那里,所以你可以实际测试我已知的工作脚本.
以下是您调用此例程的方法:
procedure TForm8.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(MultiplyTwoNumbers(3,4)));
end;
Run Code Online (Sandbox Code Playgroud)
Delphi app makes two calls, first to SendID then a second to GetDataBack
想法不起作用,因为当你打电话时(实际上是GET)在服务器上运行的东西GetDataBack
不知道有人某个时候(GET
再次)调用SendID
.GET
来自HTTP服务器的数据时,我们可以使用查询字符串轻松发送一些信息.如果我们需要发送大量信息,我们会使用这些POST
请求. 归档时间: |
|
查看次数: |
8221 次 |
最近记录: |