2006-12-13

用Delphi打造自己的WEB服务器

使用indy的IdHTTPServer控件:(限于篇幅,部分内容省略)

unit Unit1;



interface

uses

...... ActiveX,IdBaseComponent, IdComponent, IdCustomTCPServer, IdCustomHTTPServer,IdHTTPServer,IdTCPServer,IdContext;

type

......

procedure Server1CommandGet(AContext: TIdContext;ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);

procedure WebBrowser1NavigateComplete2(ASender: TObject;

const pDisp: IDispatch; var URL: OleVariant);

private

{ Private declarations }

protected

FHTMLDir: string;

FURL:string;

public

{ Public declarations }

end;



var

Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

server1.Active:=false;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

FHTMLDir:= ExtractFilePath(Application.ExeName) + 'WEBROOT';

FURL:='http://127.0.0.1:'+inttostr(server1.DefaultPort)+'/';

end;

procedure TForm1.Server1CommandGet(AContext: TIdContext;

ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);

var

LFilename: string;

LPathname: string;

begin

LFilename := ARequestInfo.Document;

if LFilename = '/' then begin

LFilename := '/index.html';

end;

LPathname := FHTMLDir + LFilename;

if FileExists(LPathname) then begin

AResponseInfo.ContentStream := TFileStream.Create(LPathname, fmOpenRead + fmShareDenyWrite);

end else begin

AResponseInfo.ResponseNo := 404;

AResponseInfo.ContentText := 'The requested URL ' + ARequestInfo.Document+ ' was not found on this server.';

end;

end;

initialization

OleInitialize(nil);

finalization

try

OleUninitialize;

except

end;

end.

精选文章

10 个适合初学者的面包板项目

  面包板是一种无需焊接就能在较短时间内轻松构建电子项目的好方法。电子领域的初学者都会遇到一个问题,那就是他们无法将印刷电路板上的元件焊接整齐。一个坏的焊点就可能导致项目无法工作。当项目无法运行时,他们最终会失去信心,不再继续制作项目。在尝试另一个项目之前,他们必须三思而后行。他...