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

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

?? ftpsrv.pas

?? 包含常用Internet協議TCP,UDP、HTTP、FTP、Telnet等
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
    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}


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function GetFileSize(FileName : String) : LongInt;
var
    SR : TSearchRec;
begin
    if FindFirst(FileName, faReadOnly or faHidden or
                 faSysFile or faArchive, SR) = 0 then
        Result := SR.Size
    else
        Result := -1;
    FindClose(SR);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
constructor TFtpServer.Create(AOwner: TComponent);
begin
    inherited Create(AOwner);
    FWindowHandle    := AllocateHWnd(WndProc);
    FServSocket      := TWSocket.Create(Self);
    FServSocket.Name := 'ServerWSocket';
    FClientList      := TList.Create;
    FPort            := 'ftp';
    FAddr            := '0.0.0.0';
    FBanner          := msgDftBanner;
    FClientClass     := TFtpCtrlSocket;
    AddCommand('PORT', CommandPORT);
    AddCommand('STOR', CommandSTOR);
    AddCommand('RETR', CommandRETR);
    AddCommand('CWD',  CommandCWD);
    AddCommand('XPWD', CommandXPWD);
    AddCommand('PWD',  CommandPWD);
    AddCommand('USER', CommandUSER);
    AddCommand('PASS', CommandPASS);
    AddCommand('LIST', CommandLIST);
    AddCommand('NLST', CommandNLST);
    AddCommand('TYPE', CommandTYPE);
    AddCommand('SYST', CommandSYST);
    AddCommand('QUIT', CommandQUIT);
    AddCommand('DELE', CommandDELE);
    AddCommand('SIZE', CommandSIZE);
    AddCommand('REST', CommandREST);
    AddCommand('RNFR', CommandRNFR);
    AddCommand('RNTO', CommandRNTO);
    AddCommand('MKD',  CommandMKD);
    AddCommand('RMD',  CommandRMD);
    AddCommand('ABOR', CommandABOR);
    AddCommand('PASV', CommandPASV);
    AddCommand('NOOP', CommandNOOP);
    AddCommand('CDUP', CommandCDUP);
    AddCommand('APPE', CommandAPPE);
    AddCommand('STRU', CommandSTRU);
    AddCommand('XMKD', CommandMKD);
    AddCommand('XRMD', CommandRMD);
    AddCommand('MDTM', CommandMDTM);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
destructor TFtpServer.Destroy;
begin
    if Assigned(FServSocket) then begin
        FServSocket.Destroy;
        FServSocket := nil;
    end;
    if Assigned(FClientList) then begin
        FClientList.Destroy;
        FClientList := nil;
    end;
    DeallocateHWnd(FWindowHandle);
    inherited Destroy;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.WndProc(var MsgRec: TMessage);
begin
    with MsgRec do begin
        case Msg of
        WM_FTPSRV_CLOSE_REQUEST  : WMFtpSrvCloseRequest(MsgRec);
        WM_FTPSRV_CLIENT_CLOSED  : WMFtpSrvClientClosed(MsgRec);
        WM_FTPSRV_ABORT_TRANSFER : WMFtpSrvAbortTransfer(MsgRec);
        WM_FTPSRV_CLOSE_DATA     : WMFtpSrvCloseData(MsgRec);
        else
            Result := DefWindowProc(Handle, Msg, wParam, lParam);
        end;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.WMFtpSrvCloseRequest(var msg: TMessage);
var
    Client : TFtpCtrlSocket;
begin
    Client := TFtpCtrlSocket(msg.LParam);
    if Client.AllSent then
        Client.Close
    else
        Client.CloseRequest := TRUE;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.Notification(AComponent: TComponent; operation: TOperation);
begin
    inherited Notification(AComponent, operation);
    if operation = opRemove then begin
        if AComponent = FServSocket then
            FServSocket := nil;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.AddCommand(
    const Keyword : String;
    const Proc    : TFtpSrvCommandProc);
begin
    if FLastCmd > High(FCmdTable) then
        raise FtpServerException.Create('Too many command');
    FCmdTable[FLastCmd].KeyWord := KeyWord;
    FCmdTable[FLastCmd].Proc    := Proc;
    Inc(FLastCmd);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.Start;
begin
    if FServSocket.State = wsListening then
        Exit;             { Server is already running }
    FServSocket.Port  := Port;
    FServSocket.Proto := 'tcp';
    FServSocket.Addr  := FAddr;
    FServSocket.OnSessionAvailable := ServSocketSessionAvailable;
    FServSocket.OnChangeState      := ServSocketStateChange;
    FServSocket.Listen;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.Stop;
begin
    FServSocket.Close;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.DisconnectAll;
var
    Client : TFtpCtrlSocket;
begin
    while FClientList.Count > 0 do begin
        Client := TFtpCtrlSocket(FClientList.Items[0]);
        Client.Close;
        FClientList.Remove(Client);
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function TFtpServer.GetActive : Boolean;
begin
    Result := (FServSocket.State = wsListening);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.SetActive(newValue : Boolean);
begin
    if newValue then
        Start
    else
        Stop;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.ServSocketStateChange(Sender : TObject; OldState, NewState : TSocketState);
begin
    if csDestroying in ComponentState then
        Exit;
    if NewState = wsListening then
        TriggerServerStart
    else if NewState = wsClosed then
        TriggerServerStop;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.ServSocketSessionAvailable(Sender : TObject; Error : Word);
var
    Client : TFtpCtrlSocket;
begin
    if Error <> 0 then
        raise FtpServerException.Create('Session available error #' + IntToStr(Error));
    Inc(FClientNum);
    Client                 := FClientClass.Create(Self);
    FClientList.Add(Client);
    Client.Name            := 'ClientWSocket' + IntToStr(FClientNum);
    Client.DataSocket.Name := 'DataWSocket' + IntToStr(FClientNum);
    Client.Banner          := FBanner;
    Client.HSocket         := ServSocket.Accept;
    Client.OnCommand       := ClientCommand;
    Client.OnSessionClosed := ClientSessionClosed;
    Client.OnDataSent      := ClientDataSent;
    TriggerClientConnect(Client, Error);
    { The event handler may have destroyed the client ! }
    if FClientList.IndexOf(Client) < 0 then
        Exit;
    { The event handler may have closed the connection }
    if Client.State <> wsConnected then
        Exit;
    { Ok, the client is still there, process with the connection }
    if (FMaxClients > 0) and (FMaxClients < ClientCount) then begin
        { Sorry, toomuch clients }
        Client.Banner := msgTooMuchClients;
        Client.StartConnection;
        Client.Close;
    end
    else
        Client.StartConnection;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.SendAnswer(Client : TFtpCtrlSocket; Answer : TFtpString);
begin
    try
        TriggerSendAnswer(Client, Answer);
        Client.SendAnswer(Answer);
    except
        { Just ignore any exception here }
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpServer.ClientCommand(
    Sender : TObject;
    CmdBuf : PChar;
    CmdLen : Integer);
const
    TELNET_IAC       = #255;
    TELNET_IP        = #244;
    TELNET_DATA_MARK = #242;
var
    Client  : TFtpCtrlSocket;
    Answer  : TFtpString;
    Params  : TFtpString;
    KeyWord : TFtpString;
    I, J    : Integer;
begin
    Client := Sender as TFtpCtrlSocket;
    Answer := '';

    { Copy the command received, removing any telnet option }
    try
        Params := '';
        I      := 0;
        while I < CmdLen do begin
            if CmdBuf[I] <> TELNET_IAC then begin
                Params := Params + CmdBuf[I];
                Inc(I);
            end
            else begin
                Inc(I);
                if CmdBuf[I] = TELNET_IAC then
                    Params := Params + CmdBuf[I];
                Inc(I);
            end;
        end;

        { Extract keyword, ignoring leading spaces and tabs }
        I := 1;
        while (I <= Length(Params)) and (Params[I] in [' ', #9]) do

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲视频一区二区| 欧美色图在线观看| 精品一区二区三区av| 丝袜亚洲另类欧美| 日韩av一区二区在线影视| 亚洲福利视频一区二区| 视频一区在线视频| 另类小说图片综合网| 黄色小说综合网站| 国产成人午夜片在线观看高清观看| 狠狠狠色丁香婷婷综合激情| 国产精品1区2区3区在线观看| 国产在线麻豆精品观看| 国产成人免费视| 99久久99久久综合| 欧美日韩一区二区三区在线| 91精品麻豆日日躁夜夜躁| 日韩女同互慰一区二区| 国产欧美一区二区精品婷婷| 国产精品国产精品国产专区不蜜| 亚洲欧洲美洲综合色网| 亚洲高清三级视频| 六月丁香婷婷久久| 91在线视频播放| 欧美高清视频www夜色资源网| 日韩欧美国产高清| 综合自拍亚洲综合图不卡区| 五月天丁香久久| 国产专区欧美精品| 91视频在线观看免费| 欧美日韩国产三级| 久久精子c满五个校花| 亚洲视频在线观看三级| 日韩精品三区四区| 成人毛片在线观看| 欧美人狂配大交3d怪物一区 | 国产一区二区毛片| 成人中文字幕合集| 欧美日韩国产区一| 中文字幕一区二区三区视频| 免费观看91视频大全| 成人av资源在线观看| 欧美一区二区视频观看视频| 国产精品欧美极品| 老汉av免费一区二区三区| 99在线精品免费| 日韩欧美一级精品久久| 亚洲精品视频在线看| 国产精品自拍三区| 日韩一区二区免费在线观看| 亚洲一区免费观看| 成人久久18免费网站麻豆| 日韩精品一区二区三区视频| 亚洲一区欧美一区| 色婷婷综合久久久中文一区二区| 精品久久久久久久久久久久久久久久久 | 欧美日韩高清一区| 亚洲精品高清在线| 不卡一区二区在线| 久久久天堂av| 久久se精品一区精品二区| 欧美日韩国产三级| 亚洲午夜私人影院| 91视频免费看| 亚洲欧美日韩国产综合在线| 成人三级在线视频| 欧美激情中文字幕| 国产又粗又猛又爽又黄91精品| 欧美一区二区在线不卡| 日本亚洲一区二区| 日韩一区二区电影网| 五月天国产精品| 91精品久久久久久蜜臀| 日本午夜精品视频在线观看| 91精品在线观看入口| 婷婷综合在线观看| 日韩欧美不卡一区| 国产麻豆午夜三级精品| 久久久精品免费观看| 国产精品 欧美精品| 国产视频一区不卡| 丁香一区二区三区| 国产精品美女久久久久高潮| 成人动漫视频在线| 亚洲精品国产无套在线观| 91久久一区二区| 一卡二卡三卡日韩欧美| 欧美日韩一区二区三区四区五区| 午夜欧美大尺度福利影院在线看| 911精品国产一区二区在线| 蜜臀av性久久久久蜜臀aⅴ| 日韩精品一区二区在线观看| 国产一区二区h| 亚洲色图一区二区三区| 欧美日韩中字一区| 免费人成在线不卡| 国产日韩视频一区二区三区| 91在线云播放| 日韩经典一区二区| 国产日韩欧美一区二区三区乱码| 91女厕偷拍女厕偷拍高清| 亚洲亚洲精品在线观看| 欧美精品一区视频| 99久久精品久久久久久清纯| 一区二区在线观看视频在线观看| 91精品福利在线一区二区三区| 国产精品一区二区在线看| 18欧美乱大交hd1984| 91精品一区二区三区在线观看| 久久99久久精品| 中文字幕免费观看一区| 欧美性生交片4| 国产盗摄视频一区二区三区| 亚洲aaa精品| 亚洲欧洲成人自拍| ww久久中文字幕| 欧美影院一区二区三区| 蜜臀av性久久久久av蜜臀妖精| 1区2区3区欧美| 久久亚洲私人国产精品va媚药| 欧美中文字幕不卡| 成人午夜电影小说| 日韩av网站在线观看| 亚洲激情中文1区| 久久精品夜夜夜夜久久| 91精品在线观看入口| 色综合天天视频在线观看| 国产老肥熟一区二区三区| 首页亚洲欧美制服丝腿| 亚洲蜜桃精久久久久久久| 国产校园另类小说区| 精品国精品国产尤物美女| 欧美高清性hdvideosex| 色久综合一二码| 99热这里都是精品| 国产成人在线影院| 国产一区二区精品在线观看| 日本不卡视频在线| 亚洲mv在线观看| 亚洲成人免费影院| 亚洲一区二区三区四区五区黄 | 香蕉加勒比综合久久| ...xxx性欧美| 国产拍揄自揄精品视频麻豆| 久久毛片高清国产| 久久中文娱乐网| 欧美不卡在线视频| 日韩欧美在线影院| 精品久久久久久久久久久院品网| 91精品国产综合久久香蕉麻豆| 色狠狠av一区二区三区| 色屁屁一区二区| 在线看国产一区| 欧美在线播放高清精品| 欧美日韩国产影片| 欧美乱妇15p| 欧美一区二区三区视频免费| 91精品国产综合久久国产大片| 欧美一区二区三区白人| 日韩一卡二卡三卡四卡| 日韩精品一区国产麻豆| 久久久久久久网| 国产欧美一二三区| 亚洲色图一区二区| 丝袜美腿亚洲色图| 精品一区二区三区不卡| 国产激情一区二区三区| 成人免费毛片嘿嘿连载视频| 色综合天天天天做夜夜夜夜做| 欧美在线制服丝袜| 日韩精品一区二区三区在线观看 | 亚洲v精品v日韩v欧美v专区| 日韩av一级片| 国产91精品一区二区麻豆亚洲| 成年人网站91| 在线电影国产精品| 久久久另类综合| 亚洲精选免费视频| 日本不卡一二三| 国产精品综合在线视频| 色婷婷久久一区二区三区麻豆| 67194成人在线观看| 欧美国产一区二区| 亚洲成人av福利| 国产精品中文欧美| 在线观看免费一区| 久久综合九色综合久久久精品综合| 国产精品免费免费| 午夜精品福利久久久| 国产成人av电影| 欧美一区二区三区人| 国产精品久久免费看| 麻豆一区二区三| 91久久一区二区| 久久久国产精品麻豆| 亚洲高清免费观看高清完整版在线观看| 精品一区二区在线观看| 欧美色涩在线第一页| 中文字幕不卡在线| 免费看欧美美女黄的网站|