亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? webserv1.pas

?? 包含常用Internet協議TCP,UDP、HTTP、FTP、Telnet等
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Author:       Fran鏾is PIETTE
Creation:     Oct 10, 1999
Description:  WebSrv1 show how to use THttpServer component to implement
              a web server.
Version:      1.00 BETA
EMail:        http://users.swing.be/francois.piette  francois.piette@swing.be
              http://www.rtfm.be/fpiette             francois.piette@rtfm.be
              francois.piette@pophost.eunet.be
Support:      Use the mailing list twsocket@rtfm.be See website for details.
Legal issues: Copyright (C) 1999 by Fran鏾is PIETTE
              Rue de Grady 24, 4053 Embourg, Belgium. Fax: +32-4-365.74.56
              <francois.piette@pophost.eunet.be><francois.piette@swing.be>

              This software is provided 'as-is', without any express or
              implied warranty.  In no event will the author be held liable
              for any  damages arising from the use of this software.

              Permission is granted to anyone to use this software for any
              purpose, including commercial applications, and to alter it
              and redistribute it freely, subject to the following
              restrictions:

              1. The origin of this software must not be misrepresented,
                 you must not claim that you wrote the original software.
                 If you use this software in a product, an acknowledgment
                 in the product documentation would be appreciated but is
                 not required.

              2. Altered source versions must be plainly marked as such, and
                 must not be misrepresented as being the original software.

              3. This notice may not be removed or altered from any source
                 distribution.

              4. You must register this software by sending a picture postcard
                 to the author. Use a nice stamp and mention your name, street
                 address, EMail address and any comment you like to say.

History:


 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
unit WebServ1;

interface

uses
  WinTypes, WinProcs, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, StdCtrls, ExtCtrls, WinSock, WSocket, WSocketS, HttpSrv;

const
  CopyRight : String     = 'WebServ (c) 1999-2000 F. Piette V1.00 BETA ';

type
  { This component is used for client connection instead of default one.    }
  { This enables to add any data we need to handle our application.         }
  { As this data is located in client component, each connected client has  }
  { his own private data.                                                   }
  TMyHttpConnection = class(THttpConnection)
  protected
    FPostedDataBuffer : PChar;     { Will hold dynamically allocated buffer }
    FPostedDataSize   : Integer;   { Databuffer size                        }
    FDataLen          : Integer;   { Keep track of received byte count.     }
  public
    destructor  Destroy; override;
  end;

  { This is the main form for our application. Any data here is global for  }
  { all clients. Put provate data in TMyHttpConnection class (see above).   }
  TAppBaseForm = class(TForm)
    ToolsPanel: TPanel;
    DisplayMemo: TMemo;
    HttpServer1: THttpServer;
    Label1: TLabel;
    DocDirEdit: TEdit;
    Label2: TLabel;
    DefaultDocEdit: TEdit;
    StartButton: TButton;
    StopButton: TButton;
    Label3: TLabel;
    PortEdit: TEdit;
    ClientCountLabel: TLabel;
    Label5: TLabel;
    ClearButton: TButton;
    DisplayHeaderCheckBox: TCheckBox;
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure HttpServer1GetDocument(Sender, Client: TObject;
      var Flags: THttpGetFlag);
    procedure StartButtonClick(Sender: TObject);
    procedure StopButtonClick(Sender: TObject);
    procedure HttpServer1ClientConnect(Sender: TObject;
      Client: TObject; Error: Word);
    procedure HttpServer1ClientDisconnect(Sender: TObject;
      Client: TObject; Error: Word);
    procedure HttpServer1ServerStarted(Sender: TObject);
    procedure HttpServer1ServerStopped(Sender: TObject);
    procedure HttpServer1HeadDocument(Sender, Client: TObject;
      var Flags: THttpGetFlag);
    procedure HttpServer1PostedData(Sender: TObject;
      Client: TObject; Error: Word);
    procedure HttpServer1PostDocument(Sender, Client: TObject;
      var Flags: THttpGetFlag);
    procedure ClearButtonClick(Sender: TObject);
  private
    FIniFileName   : String;
    FInitialized   : Boolean;
    FCountRequests : Integer;
    procedure CreateVirtualDocument_time_htm(Sender    : TObject;
                                    Client    : TObject;
                                    var Flags : THttpGetFlag);
    procedure DisplayHeader(Client : TMyHttpConnection);
    procedure ProcessPostedData_CgiFrm1(Client : TMyHttpConnection);
  public
    procedure Display(Msg : String);
    property  IniFileName : String read FIniFileName write FIniFileName;
  end;

var
  AppBaseForm: TAppBaseForm;

implementation

{$R *.DFM}

const
    { IniFile layout for persistent data }
    SectionWindow      = 'WindowMain';
    KeyTop             = 'Top';
    KeyLeft            = 'Left';
    KeyWidth           = 'Width';
    KeyHeight          = 'Height';
    SectionData        = 'Data';
    KeyDocDir          = 'DocDir';
    KeyDefaultDoc      = 'DefaultDoc';
    KeyPort            = 'Port';
    KeyDisplayHeader   = 'DisplayHeader';


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{$IFDEF VER80}
function TrimRight(Str : String) : String;
var
    i : Integer;
begin
    i := Length(Str);
    while (i > 0) and (Str[i] = ' ') do
        i := i - 1;
    Result := Copy(Str, 1, i);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function TrimLeft(Str : String) : String;
var
    i : Integer;
begin
    if Str[1] <> ' ' then
        Result := Str
    else begin
        i := 1;
        while (i <= Length(Str)) and (Str[i] = ' ') do
            i := i + 1;
        Result := Copy(Str, i, Length(Str) - i + 1);
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function Trim(Str : String) : String;
begin
    Result := TrimLeft(TrimRight(Str));
end;
{$ENDIF}


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TAppBaseForm.FormCreate(Sender: TObject);
begin
    { Create IniFileName based on EXE file name; }
    FIniFileName := LowerCase(ExtractFileName(Application.ExeName));
    FIniFileName := Copy(FIniFileName, 1, Length(FIniFileName) - 3) + 'ini';
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TAppBaseForm.FormShow(Sender: TObject);
var
    IniFile : TIniFile;
    wsi     : TWSADATA;
begin
    if not FInitialized then begin
        FInitialized := TRUE;

        { Restore persistent data from INI file }
        IniFile      := TIniFile.Create(FIniFileName);
        Width        := IniFile.ReadInteger(SectionWindow, KeyWidth,  Width);
        Height       := IniFile.ReadInteger(SectionWindow, KeyHeight, Height);
        Top          := IniFile.ReadInteger(SectionWindow, KeyTop,
                                            (Screen.Height - Height) div 2);
        Left         := IniFile.ReadInteger(SectionWindow, KeyLeft,
                                            (Screen.Width  - Width)  div 2);
        DocDirEdit.Text     := IniFile.ReadString(SectionData, KeyDocDir,
                                                  'c:\WwwRoot');
        DefaultDocEdit.Text := IniFile.ReadString(SectionData, KeyDefaultDoc,
                                                  'index.html');
        PortEdit.Text       := IniFile.ReadString(SectionData, KeyPort,
                                                  '80');
        DisplayHeaderCheckBox.Checked :=
                Boolean(IniFile.ReadInteger(SectionData, KeyDisplayHeader, 0));
        IniFile.Destroy;
        { Initialize client count caption }
        ClientCountLabel.Caption := '0';
        { Display version info for program and use components }
        wsi := WinsockInfo;
        DisplayMemo.Clear;
        Display(CopyRight);
        Display('Using:');
        Display('   ' + WSocket.CopyRight);
        Display('   ' + WSocketS.CopyRight);
        Display('   ' + HttpSrv.CopyRight);
        Display('    Winsock:');
        Display('        Version ' +
                Format('%d.%d', [WinsockInfo.wHighVersion shr 8,
                                 WinsockInfo.wHighVersion and 15]));
        Display('        ' + StrPas(@wsi.szDescription));
        Display('        ' + StrPas(@wsi.szSystemStatus));
        if wsi.lpVendorInfo <> nil then
            Display('        ' + StrPas(wsi.lpVendorInfo));
        { Automatically start server }
        StartButtonClick(Self);
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TAppBaseForm.FormClose(Sender: TObject; var Action: TCloseAction);
var
    IniFile : TIniFile;
begin
    { Save persistent data to INI file }
    IniFile := TIniFile.Create(FIniFileName);
    IniFile.WriteInteger(SectionWindow, KeyTop,         Top);
    IniFile.WriteInteger(SectionWindow, KeyLeft,        Left);
    IniFile.WriteInteger(SectionWindow, KeyWidth,       Width);
    IniFile.WriteInteger(SectionWindow, KeyHeight,      Height);
    IniFile.WriteString(SectionData,    KeyDocDir,      HttpServer1.DocDir);
    IniFile.WriteString(SectionData,    KeyDefaultDoc,  HttpServer1.DefaultDoc);
    IniFile.WriteString(SectionData,    KeyPort,        HttpServer1.Port);
    IniFile.WriteInteger(SectionData,   KeyDisplayHeader,
                                        ord(DisplayHeaderCheckBox.Checked));
    IniFile.Destroy;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ Display a message in display memo box, making sure we don't overflow it.  }
procedure TAppBaseForm.Display(Msg : String);
begin
    DisplayMemo.Lines.BeginUpdate;
    try
        if DisplayMemo.Lines.Count > 200 then begin
            { We preserve only 200 lines }
            while DisplayMemo.Lines.Count > 200 do
                DisplayMemo.Lines.Delete(0);
        end;
        DisplayMemo.Lines.Add(Msg);
    finally
        DisplayMemo.Lines.EndUpdate;
        { Makes last line visible }
        SendMessage(DisplayMemo.Handle, EM_SCROLLCARET, 0, 0);
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ This event handler is called when user clicks on start button. It is also }
{ called from FormShow event handler, at program startup. It starts server. }
{ We need to pass default document, document directory and client class     }
{ to HTTP server component. Client class is very usefull because it         }
{ instruct server component to instanciate our own client class instead of  }
{ defualt client class. Using our own client class will enables you to add  }
{ any data we need to handle our application. This data is private for each }
{ client.                                                                   }
{ When server is started, we will get OnServerStarted event triggered.      }
procedure TAppBaseForm.StartButtonClick(Sender: TObject);
begin
    HttpServer1.DocDir      := Trim(DocDirEdit.Text);
    HttpServer1.DefaultDoc  := Trim(DefaultDocEdit.Text);
    HttpServer1.Port        := Trim(PortEdit.Text);
    HttpServer1.ClientClass := TMyHttpConnection;
    HttpServer1.Start;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ This event handler is triggered when user clicks on stop button. We just  }
{ stop the server. We will get OnServerStopped event triggered.             }
procedure TAppBaseForm.StopButtonClick(Sender: TObject);
begin
    HttpServer1.Stop;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ This event handler is triggered when user clicks on clear buttoN; We just }
{ clear the memo used for displaying activity.                              }
procedure TAppBaseForm.ClearButtonClick(Sender: TObject);
begin
    DisplayMemo.Clear;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ This event handler is triggered when HTTP server is started, that is when }
{ server socket has started listening.                                      }
procedure TAppBaseForm.HttpServer1ServerStarted(Sender: TObject);
begin
    DocDirEdit.Enabled     := FALSE;
    DefaultDocEdit.Enabled := FALSE;
    PortEdit.Enabled       := FALSE;
    StartButton.Enabled    := FALSE;
    StopButton.Enabled     := TRUE;
    Display('Server is waiting for connections');
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ This event handler is triggered when server has been stopped, that is     }
{ when server socket stop listening.                                        }
procedure TAppBaseForm.HttpServer1ServerStopped(Sender: TObject);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品福利在线| 亚洲第一狼人社区| 亚洲国产综合91精品麻豆| 蜜桃视频在线观看一区| 成人一区二区三区中文字幕| 欧美久久久久久久久久 | av动漫一区二区| 欧美精品成人一区二区三区四区| 国产欧美一区二区三区沐欲| 亚洲日本护士毛茸茸| 国产东北露脸精品视频| 在线视频国产一区| 久久久久久久久久久久久久久99 | 国产精品1024| 欧美视频一区二| 久久亚洲二区三区| 亚洲一区二区三区四区的 | 亚洲免费大片在线观看| 麻豆91精品视频| 欧美亚州韩日在线看免费版国语版| 欧美一二三四在线| 亚洲精品乱码久久久久久日本蜜臀| 蜜桃视频在线一区| 欧美日韩免费观看一区三区| 国产精品无码永久免费888| 日韩中文字幕91| 日本久久电影网| 国产精品网站在线播放| 国内成人自拍视频| 91精品欧美久久久久久动漫| 亚洲少妇30p| 国产乱一区二区| 日韩免费高清电影| 午夜精品爽啪视频| 欧美午夜在线观看| 亚洲日本电影在线| 成人av在线一区二区三区| 精品久久久久久久久久久院品网| 日韩经典一区二区| 欧美日韩日本视频| 亚洲国产欧美日韩另类综合 | 99久久综合色| 欧美国产一区在线| 国产成人亚洲综合a∨婷婷图片| 777午夜精品免费视频| 午夜欧美在线一二页| 在线观看日韩国产| 亚洲激情图片qvod| 韩日av一区二区| 26uuu精品一区二区三区四区在线| 欧美aaaaa成人免费观看视频| 欧美性三三影院| 午夜久久福利影院| 欧美美女喷水视频| 男男gaygay亚洲| 日韩欧美国产精品一区| 久久国产精品99久久久久久老狼| 日韩一区二区影院| 韩国三级中文字幕hd久久精品| 欧美电视剧在线看免费| 国产综合色精品一区二区三区| 欧美成人a∨高清免费观看| 国产一区二区91| 欧美极品美女视频| 91在线看国产| 艳妇臀荡乳欲伦亚洲一区| 欧美日韩在线播放三区四区| 日韩中文字幕麻豆| wwwwxxxxx欧美| 成人午夜精品在线| 一区二区在线观看视频在线观看| 日本电影欧美片| 天天综合网 天天综合色| 日韩午夜激情视频| 国产白丝网站精品污在线入口| 国产精品视频一二三区| 91视视频在线直接观看在线看网页在线看| 亚洲人精品午夜| 欧美日韩精品电影| 国产精品一区二区黑丝| 亚洲婷婷在线视频| 欧美一区二区成人6969| 懂色一区二区三区免费观看| 一区二区三区日韩精品视频| 51精品秘密在线观看| 成人综合在线视频| 亚洲一区在线免费观看| 日韩免费电影网站| 色素色在线综合| 久久国产精品无码网站| 亚洲美女少妇撒尿| 日韩欧美成人一区二区| 99久久久精品| 麻豆精品国产91久久久久久| 亚洲欧美视频一区| 精品国产三级a在线观看| 色哟哟国产精品| 加勒比av一区二区| 亚洲成人免费视频| 国产清纯白嫩初高生在线观看91 | 成人免费毛片高清视频| 肉色丝袜一区二区| 亚洲视频网在线直播| 精品国产亚洲在线| 欧美日韩国产综合一区二区| 懂色一区二区三区免费观看| 日韩高清一区在线| 亚洲国产一区二区三区| 国产清纯白嫩初高生在线观看91| 91精品国产入口| 色一情一乱一乱一91av| 成人免费av资源| 韩国v欧美v日本v亚洲v| 丝袜美腿亚洲一区| 一区二区三区中文字幕| 国产日产欧美一区| 欧美va在线播放| 日韩欧美视频一区| 91麻豆精品久久久久蜜臀| 91九色02白丝porn| 日本精品一区二区三区四区的功能| 风流少妇一区二区| 国产伦理精品不卡| 国产美女一区二区| 激情成人综合网| 久久超碰97人人做人人爱| 奇米精品一区二区三区四区| 亚洲va中文字幕| 五月激情丁香一区二区三区| 亚洲午夜私人影院| 亚洲一区二区三区四区五区中文| 亚洲精品亚洲人成人网在线播放| 中文字幕的久久| 国产精品成人免费在线| 国产精品视频你懂的| 国产精品污网站| 中文字幕中文字幕一区二区| 亚洲婷婷综合久久一本伊一区| 国产精品久久777777| 亚洲人成小说网站色在线 | 欧美日韩色一区| 色婷婷精品久久二区二区蜜臀av| 99riav一区二区三区| 91麻豆swag| 欧美视频一区二区三区四区| 777欧美精品| 欧美精品一区二区三区在线播放| 国产亲近乱来精品视频| 亚洲国产精品传媒在线观看| 洋洋成人永久网站入口| 日韩不卡在线观看日韩不卡视频| 免费在线看一区| 国产精品一区二区视频| www.久久久久久久久| 色菇凉天天综合网| 欧美高清精品3d| 久久亚洲精精品中文字幕早川悠里| 中文字幕欧美日韩一区| 一区二区在线观看不卡| 秋霞电影网一区二区| 国产高清无密码一区二区三区| www.av亚洲| 91麻豆精品国产91久久久久久 | 青青草精品视频| 国产成人精品一区二区三区网站观看 | 精品一区二区在线视频| 福利91精品一区二区三区| 欧美网站大全在线观看| 精品国产三级a在线观看| 综合av第一页| 久久福利视频一区二区| 99精品欧美一区二区三区综合在线| 欧美日韩国产中文| 国产欧美精品一区| 亚洲高清免费视频| 国产成人综合网| 欧美日韩小视频| 综合av第一页| 狠狠网亚洲精品| 91久久线看在观草草青青| 精品国产91乱码一区二区三区 | 国产精品久久久久久久久动漫 | 欧美精品一区二区三区四区| 亚洲视频资源在线| 国产一区二区三区在线看麻豆| 色婷婷久久久亚洲一区二区三区 | 91女厕偷拍女厕偷拍高清| 日韩一区二区三区观看| 亚洲精品乱码久久久久| 国产成人午夜视频| 欧美不卡一二三| 亚洲午夜私人影院| 色综合中文字幕国产 | 欧美精品一区视频| 午夜精品福利一区二区蜜股av | 亚洲国产精品一区二区www| 97se亚洲国产综合在线| 国产精品国产三级国产aⅴ入口| 国产aⅴ综合色| 1024国产精品|