我正在尝试使用Delphi 7 / indy(9)组件(控制台应用程序,没有表单/应用程序)来执行HttpServer:
更新:具有无限循环的完整控制台示例。
program httpserver;
{$APPTYPE CONSOLE}
uses
IdHTTPServer, IdTCPServer, IdCustomHTTPServer;
Type
TCommandHandler= class
protected
procedure DoCommandGet(AThread: TIdPeerThread;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
end;
{$R *.res}
var Server:TIdHTTPServer ;
CH:TCommandHandler;
procedure TCommandHandler.DoCommandGet(AThread: TIdPeerThread;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
AResponseInfo.ResponseText := '1234';
end;
begin
Server := TIdHTTPServer.Create(nil);
CH := TCommandHandler.Create;
Server.OnCommandGet :=CH.DoCommandGet;
Server.DefaultPort := 3030;
Server.Active := True;
while true do ;
end.
但不起作用!我阅读了indy的源代码并在google上搜索但没有成功。
更新:
也许是indy的错误/限制...
答案 0 :(得分:3)
您在AResponseInfo
中设置了错误的成员。
您必须使用ContentText
而不是ResponseText
(将在您发现的ResponseCode之后写入)
program httpserver;
{$APPTYPE CONSOLE}
uses
IdHTTPServer, IdTCPServer, IdCustomHTTPServer;
Type
TCommandHandler= class
protected
procedure DoCommandGet(AThread: TIdPeerThread;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
end;
{$R *.res}
var Server:TIdHTTPServer ;
CH:TCommandHandler;
procedure TCommandHandler.DoCommandGet(AThread: TIdPeerThread;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
AResponseInfo.ContentText := '1234';
AResponseInfo.ContentType := 'text/plain';
end;
begin
Server := TIdHTTPServer.Create(nil);
CH := TCommandHandler.Create;
Server.OnCommandGet :=CH.DoCommandGet;
Server.DefaultPort := 3030;
Server.Active := True;
Readln;
end.
答案 1 :(得分:0)
嗨,你需要做一个无限循环,并注意关闭一些组合。
program httpserver;
{$APPTYPE CONSOLE}
uses idHTTPServer;
var
Server: TidHTTPServer;
begin
Server := TidHTTPServer.Create();
Server.DefaultPort := 3030;
Server.Active := True;
repeat
//DO SOMETHING
until (Break some how);
end;
所以应用程序永远不会结束,在delphi上使用命令application.run为windows消息启动一个内部循环。
其他问题,需要为TidHTTPServer组件上的事件添加代码