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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? httpsrv.pas

?? 包含常用Internet協(xié)議TCP,UDP、HTTP、FTP、Telnet等
?? PAS
?? 第 1 頁 / 共 3 頁
字號:


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ Called by destructor when child component is created or destroyed.        }
procedure THttpServer.Notification(
    AComponent : TComponent;
    Operation  : TOperation);
begin
    inherited Notification(AComponent, Operation);
    if Operation = opRemove then begin
        if AComponent = FWSocketServer then
            FWSocketServer := nil;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ Start the server. That is make FWSocketServer listening to the port.      }
procedure THttpServer.Start;
begin
    { Create a new FWSocketServer if needed }
    if not Assigned(FWSocketServer) then
        FWSocketServer := TWSocketServer.Create(Self);
    { If already listening, then do nothing }
    if FWSocketServer.State = wsListening then
        Exit;
    { Pass al parameters to FWSocketServer and make it listen }
    FWSocketServer.ClientClass        := FClientClass;
    FWSocketServer.OnClientCreate     := WSocketServerClientCreate;
    FWSocketServer.OnClientConnect    := WSocketServerClientConnect;
    FWSocketServer.OnClientDisconnect := WSocketServerClientDisconnect;
    FWSocketServer.OnSessionClosed    := WSocketServerSessionClosed;
    FWSocketServer.OnChangeState      := WSocketServerChangeState;
    FWSocketServer.Banner             := '';
    FWSocketServer.Proto              := 'tcp';
    FWSocketServer.Port               := FPort;
    FWSocketServer.Addr               := FAddr;
    FWSocketServer.Listen;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure THttpServer.Stop;
var
    I : Integer;
begin
    if not Assigned(FWSocketServer) then
        Exit;
    FWSocketServer.Close;
    { Disconnect all clients }
    for I := FWSocketServer.ClientCount - 1 downto 0 do begin
        try
            FWSocketServer.Client[I].Abort;
        except
            { Ignore any exception here }
        end;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure THttpServer.SetPort(newValue : String);
begin
    if newValue = FPort then
        Exit;
    FPort := newValue;
    { If server is already listening, then stop it and restart it with      }
    { new port. Do not disconnect already connected clients.                }
    if Assigned(FWSocketServer) and
       (FWSocketServer.State = wsListening) then begin
        FWSocketServer.Close;
        Start;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure THttpServer.SetAddr(newValue : String);
begin
    if newValue = FAddr then
        Exit;
    FAddr := newValue;
    { If server is already listening, then stop it and restart it with      }
    { new Addr. Do not disconnect already connected clients.                }
    if Assigned(FWSocketServer) and
       (FWSocketServer.State = wsListening) then begin
        FWSocketServer.Close;
        Start;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ Get function for ClientCount property. Just return value from             }
{ FWSocketServer.                                                           }
function THttpServer.GetClientCount;
begin
    if not Assigned(FWSocketServer) then
        Result := 0
    else
        Result := FWSocketServer.ClientCount;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ This event handler is triggered when state of server socket has changed.  }
{ We use it to trigger our OnServerStarted event.                           }
procedure THttpServer.WSocketServerChangeState(
    Sender : TObject;
    OldState, NewState : TSocketState);
begin
    if newState = wsListening then
        TriggerServerStarted;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure THttpServer.WSocketServerSessionClosed(
    Sender : TObject;
    Error  : Word);
begin
    TriggerServerStopped;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ A new client component has been created                                   }
procedure THttpServer.WSocketServerClientCreate(
    Sender : TObject;
    Client : TWSocketClient);
begin
    Client.LingerOnOff   := FLingerOnOff;
    Client.LingerTimeout := FLingerTimeout;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ A new client just connected. Setup things to handle his requests.         }
{ HTTP header is line oriented so we turn line mode on. We use LF as end of }
{ line character altough HTTP uses CR/LF pair as end of line, because many  }
{ Unix client do not respect standards and use single LF...                 }
{ HTTP is not interactive, so we turn line editing to false (faster).       }
procedure THttpServer.WSocketServerClientConnect(
    Sender : TObject;
    Client : TWSocketClient;
    Error  : Word);
begin
    THttpConnection(Client).LineMode       := TRUE;
    THttpConnection(Client).LineEdit       := FALSE;
    THttpConnection(Client).LineEnd        := #10;
    THttpConnection(Client).DocDir         := Self.DocDir;
    THttpConnection(Client).DefaultDoc     := Self.DefaultDoc;
    THttpConnection(Client).OnGetDocument  := TriggerGetDocument;
    THttpConnection(Client).OnHeadDocument := TriggerHeadDocument;
    THttpConnection(Client).OnPostDocument := TriggerPostDocument;
    THttpConnection(Client).OnPostedData   := TriggerPostedData;
    TriggerClientConnect(Client, Error);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ A client is about to disconnect.                                          }
procedure THttpServer.WSocketServerClientDisconnect(
    Sender : TObject;
    Client : TWSocketClient;
    Error  : Word);
begin
    TriggerClientDisconnect(Client, Error);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure THttpServer.TriggerServerStarted;
begin
    if Assigned(FOnServerStarted) then
        FOnServerStarted(Self);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure THttpServer.TriggerServerStopped;
begin
    if Assigned(FOnServerStarted) then
        FOnServerStopped(Self);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure THttpServer.TriggerClientConnect(
    Client : TObject;
    Error  : Word);
begin
    if Assigned(FOnClientConnect) then
        FOnClientConnect(Self, Client, Error);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure THttpServer.TriggerClientDisconnect(
    Client : TObject;
    Error  : Word);
begin
    if Assigned(FOnClientDisconnect) then
        FOnClientDisconnect(Self, Client, Error);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure THttpServer.TriggerGetDocument(
     Sender     : TObject;
     var Flags  : THttpGetFlag);
begin
    if Assigned(FOnGetDocument) then
        FOnGetDocument(Self, Sender, Flags);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure THttpServer.TriggerHeadDocument(
     Sender     : TObject;
     var Flags  : THttpGetFlag);
begin
    if Assigned(FOnHeadDocument) then
        FOnHeadDocument(Self, Sender, Flags);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure THttpServer.TriggerPostedData(Sender     : TObject;
                                        Error      : WORD);
begin
    if Assigned(FOnPostedData) then
        FOnPostedData(Self, Sender, Error);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure THttpServer.TriggerPostDocument(
     Sender     : TObject;
     var Flags  : THttpGetFlag);
begin
    if Assigned(FOnPostDocument) then
        FOnPostDocument(Self, Sender, Flags);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
constructor THttpConnection.Create(AOwner : TComponent);
begin
    inherited Create(AOwner);
    LineMode        := TRUE;
    LineEdit        := FALSE;
    LineEnd         := #10;
    FRequestHeader  := TStringList.Create;
    FState          := hcRequest;
    OnDataAvailable := ConnectionDataAvailable;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
destructor THttpConnection.Destroy;
begin
    if Assigned(FRequestHeader) then begin
        FRequestHeader.Destroy;
        FRequestHeader := nil;
    end;
    if Assigned(FDocStream) then begin
        FDocStream.Destroy;
        FDocStream := nil;
    end;
    if Assigned(FDocBuf) then begin
        FreeMem(FDocBuf);
        FDocBuf := nil;
    end;
    inherited Destroy;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure THttpConnection.WndProc(var MsgRec: TMessage);
begin
    with MsgRec do begin
        { We *MUST* handle all exception to avoid application shutdown }
        try
            if Msg = WM_HTTP_DONE then
                WMHttpDone(MsgRec)
            else
                inherited WndProc(MsgRec);
        except
            on E:Exception do
                HandleBackGroundException(E);
        end;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure THttpConnection.WMHttpDone(var msg: TMessage);
begin
     FState := hcRequest;
     if CompareText(FRequestConnection, 'Keep-Alive') <> 0 then
         CloseDelayed;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ This procedure is called each time data is available from a client.       }
{ We use FState variable to keep track of the where we are in the http      }
{ protocol: request command, header line or posted data.                    }
procedure THttpConnection.ConnectionDataAvailable(Sender: TObject; Error : Word);
var
    Len     : Integer;
    I       : Integer;
begin
    { If we are in data state, then the application has to receive data }
    if FState = hcPostedData then begin
        if FAcceptPostedData and Assigned(FOnPostedData) then
            FOnPostedData(Self, Error)
        else
            { No one is willing data, received it and throw it away }
            FRcvdLine := ReceiveStr;
        Exit;
    end;
    { We use line mode. We will receive complete lines }
    FRcvdLine := ReceiveStr;
    { Remove trailing CR/LF }
    Len := Length(FRcvdLine);
    if (Len > 0) and (FRcvdLine[Len] = #10) then begin
        Dec(Len);
        if (Len > 0) and (FRcvdLine[Len] = #13) then
            Dec(Len);
        SetLength(FRcvdLine, Len);
    end;
    if FState = hcRequest then begin
        { We just start a new request. Initialize all header variables }
        FRequestContentType    := '';
        FRequestContentLength  := 0;
        FRequestContentType    := '';
        FRequestAccept         := '';
        FRequestReferer        := '';
        FRequestAcceptLanguage := '';
        FRequestAcceptEncoding := '';
        FRequestUserAgent      := '';
        FRequestHost           := '';
        FRequestConnection     := '';
        { The line we just received is HTTP command, parse it  }
        ParseRequest;
        { Next lines will be header lines }
        FState := hcHeader;
        Exit;
    end;
    { We can comes here only in hcHeader state }
    if FRcvdLine = '' then begin
        { Last header line is an empty line. Then we enter data state }
        FState := hcPostedData;
        { We will process request before receiving data because application }
        { has to setup things to be able to receive posted data             }
        ProcessRequest;
        Exit;
    end;
    { We comes here for normal header line. Extract some interesting variables }
    I := Pos(':', FRcvdLine);
    if I > 0 then begin
        try
            repeat
                Inc(I);
            until (I > Length(FRcvdLine)) or (FRcvdLine[I] <> ' ');
            if StrLIComp(@FRcvdLine[1], 'content-type:', 13) = 0 then
                FRequestContentType := Copy(FRcvdLine, I, Length(FRcvdLine))
            else if StrLIComp(@FRcvdLine[1], 'content-length:', 15) = 0 then
                FRequestContentLength := StrToInt(Copy(FRcvdLine, I, Length(FRcvdLine)))
            else if StrLIComp(@FRcvdLine[1], 'Accept:', 7) = 0 then
                FRequestAccept:= Copy(FRcvdLine, I, Length(FRcvdLine))
            else if StrLIComp(@FRcvdLine[1], 'Referer:', 8) = 0 then
                FRequestReferer := Copy(FRcvdLine, I, Length(FRcvdLine))
            else if StrLIComp(@FRcvdLine[1], 'Accept-Language:', 16) = 0 then
                FRequestAcceptLanguage := Copy(FRcvdLine, I, Length(FRcvdLine))
            else if StrLIComp(@FRcvdLine[1], 'Accept-Encoding:', 16) = 0 then
                FRequestAcceptEncoding := Copy(FRcvdLine, I, Length(FRcvdLine))
            else if StrLIComp(@FRcvdLine[1], 'User-Agent:', 11) = 0 then
                FRequestUserAgent := Copy(FRcvdLine, I, Length(FRcvdLine))
            else if StrLIComp(@FRcvdLine[1], 'Host:', 5) = 0 then
                FRequestHost := Copy(FRcvdLine, I, Length(FRcvdLine))
            else if StrLIComp(@FRcvdLine[1], 'Connection:', 11) = 0 then
                FRequestConnection := Copy(FRcvdLine, I, Length(FRcvdLine));
        except
            { Ignore any exception in parsing header line }
        end;
    end;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区在线播放| 91精品国产综合久久久久久久久久 | 国产精品区一区二区三区| 久久99国产精品尤物| 亚洲精品在线三区| 国产麻豆欧美日韩一区| 久久九九99视频| 成人免费高清视频| √…a在线天堂一区| 在线观看视频欧美| 日韩av成人高清| 久久久久久久国产精品影院| 成人av在线一区二区| 亚洲精品久久嫩草网站秘色| 欧美剧情片在线观看| 国产在线精品一区二区夜色 | 中文字幕在线不卡一区二区三区| 成人网男人的天堂| 亚洲免费看黄网站| 日韩一区二区三区四区| 丁香桃色午夜亚洲一区二区三区| 日韩一区中文字幕| 日韩一区二区三区高清免费看看| 粉嫩高潮美女一区二区三区| 亚洲一区二区三区小说| 久久这里只有精品首页| 欧美亚洲动漫精品| 国产乱子伦视频一区二区三区| 亚洲另类春色国产| 亚洲精品一区二区三区精华液| 91在线视频免费91| 麻豆视频观看网址久久| 亚洲欧洲成人精品av97| 日韩视频在线永久播放| 91免费观看视频| 狠狠色丁香婷婷综合| 亚洲欧美日韩一区| 欧美日韩一区视频| 久久综合成人精品亚洲另类欧美 | 国产精品久久久久一区 | 欧美白人最猛性xxxxx69交| 91一区二区在线观看| 久久综合综合久久综合| 亚洲激情图片qvod| 欧美极品aⅴ影院| 日韩一区二区在线观看视频| 色婷婷av一区二区三区软件 | 国产麻豆视频一区二区| 三级一区在线视频先锋 | 91精品国产黑色紧身裤美女| gogo大胆日本视频一区| 激情国产一区二区 | 国内精品不卡在线| www.久久精品| 一区二区三区在线高清| 久久久久久久性| 日韩欧美国产成人一区二区| 精品视频免费在线| 99久久久精品| 成人毛片在线观看| 国产高清在线观看免费不卡| 美腿丝袜亚洲三区| 日韩极品在线观看| 亚洲一二三四区不卡| 亚洲一区二区三区四区在线 | 一区二区三区在线高清| 亚洲日本乱码在线观看| 国产精品久久久久一区二区三区| 久久久精品国产99久久精品芒果| 久久综合视频网| 26uuu久久综合| 精品1区2区在线观看| 精品国产免费一区二区三区四区 | 国产欧美综合在线观看第十页| 日韩欧美不卡在线观看视频| 日韩一区二区三区在线视频| 欧美一区二区三区免费视频 | 三级一区在线视频先锋 | 三级欧美在线一区| 日本不卡一区二区三区| 日韩av中文字幕一区二区三区| 亚洲成av人片在线| 日韩电影一区二区三区四区| 免费在线成人网| 国产精品影视网| 国产成人av网站| 91在线看国产| 欧美视频日韩视频在线观看| 欧美喷水一区二区| 日韩午夜小视频| 久久精品人人做人人综合| 国产欧美日韩亚州综合| 2024国产精品| 一区在线观看免费| 亚洲色图欧洲色图婷婷| 亚洲综合免费观看高清在线观看| 日韩在线观看一区二区| 久久精品72免费观看| 国产.欧美.日韩| 欧日韩精品视频| 欧美一区二区三区电影| 久久精品男人天堂av| 亚洲人成小说网站色在线| 亚洲va国产va欧美va观看| 91精品91久久久中77777| 国产精品久久久久久久久晋中| 国产精品嫩草久久久久| 成人欧美一区二区三区小说| 亚洲超丰满肉感bbw| 麻豆国产欧美一区二区三区| 国产成人综合网站| 一本色道久久综合亚洲91| 91精品国产高清一区二区三区蜜臀| 久久婷婷综合激情| 一区二区三区日韩欧美| 美腿丝袜一区二区三区| 97精品国产97久久久久久久久久久久 | 亚洲色图欧洲色图婷婷| 蜜臀av国产精品久久久久| 国产一区二区三区在线观看免费视频 | 国产精品色婷婷| 水蜜桃久久夜色精品一区的特点| 国产一本一道久久香蕉| 欧美三级蜜桃2在线观看| 精品久久久久久久人人人人传媒 | 亚洲成人免费看| 国产精品资源在线观看| 欧美性受xxxx黑人xyx性爽| 欧美一区二区不卡视频| 国产精品美女久久福利网站 | 一区二区三区欧美亚洲| 国产一区二区在线电影| 91黄视频在线观看| 国产视频一区二区在线| 午夜精品在线看| 99久久国产综合精品女不卡 | 亚洲欧洲精品天堂一级| 狠狠色丁香婷婷综合久久片| 欧美日韩国产一级| 国产精品美女www爽爽爽| 狠狠狠色丁香婷婷综合久久五月| 欧美视频在线观看一区二区| 国产精品免费丝袜| 国产精品99久久久久久似苏梦涵 | 亚洲成人精品影院| 成人h动漫精品一区二| 日韩一区二区在线观看视频播放| 亚洲制服欧美中文字幕中文字幕| 成人av在线播放网址| 精品国产乱码久久| 日本欧美肥老太交大片| 欧美中文一区二区三区| 亚洲欧美国产毛片在线| 不卡高清视频专区| 国产午夜精品一区二区三区视频 | 日韩欧美一区二区久久婷婷| 亚洲香蕉伊在人在线观| 91老师国产黑色丝袜在线| 国产三级精品三级在线专区| 国产主播一区二区三区| 精品国产网站在线观看| 麻豆精品一区二区av白丝在线| 欧美日本不卡视频| 亚洲电影一级片| 色综合天天综合网天天看片| **欧美大码日韩| 成av人片一区二区| 亚洲日本丝袜连裤袜办公室| 97se亚洲国产综合自在线观| 亚洲欧洲韩国日本视频| 色综合久久综合网| 美腿丝袜在线亚洲一区| 国产成人精品免费在线| 久久久久久免费网| 国产精品99精品久久免费| 欧美国产丝袜视频| av在线不卡免费看| 亚洲精品国产一区二区三区四区在线| caoporen国产精品视频| 亚洲色图在线播放| 欧美日韩一二三区| 开心九九激情九九欧美日韩精美视频电影| 欧美一级欧美一级在线播放| 久久精品国产免费| 国产欧美在线观看一区| 99久久免费精品| 亚洲国产aⅴ成人精品无吗| 日韩午夜av电影| 国产成a人无v码亚洲福利| 亚洲欧洲精品一区二区精品久久久| 色噜噜夜夜夜综合网| 首页国产欧美日韩丝袜| 久久久欧美精品sm网站| www.日韩精品| 日韩国产在线一| 国产欧美一区二区精品性色| 色综合久久久久| 精品一区二区三区免费视频| 国产精品午夜在线观看| 欧美日韩精品一区二区在线播放|