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

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

?? tncnx.pas

?? 包含常用Internet協議TCP,UDP、HTTP、FTP、Telnet等
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
    else
        Result := wsInvalidState;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TTnCnx.SocketSessionConnected(Sender: TObject; Error : word);
begin
    if Assigned(FOnSessionConnected) then
        FOnSessionConnected(Self, Error);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TTnCnx.SocketSessionClosed(Sender: TObject; Error : word);
begin
    if Socket.State <> wsClosed then
        Socket.Close;
    if Assigned(FOnSessionClosed) then
        FOnSessionClosed(Self, Error);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TTnCnx.SocketDataAvailable(Sender: TObject; Error : word);
var
    Len, I : Integer;
    Buffer : array [1..2048] of char;
    Socket : TWSocket;
begin
    Socket := Sender as TWSocket;
    Len := Socket.Receive(@Buffer[1], High(Buffer));
    if Len = 0 then begin
        { Remote has closed }
        Display(#13 + #10 + '**** Remote has closed ****' + #13 + #10);
    end
    else if Len < 0 then begin
        { An error has occured }
        if Socket.LastError <> WSAEWOULDBLOCK then
            Display(#13 + #10 + '**** ERROR: ' + IntToStr(Socket.LastError) +
                    ' ****' + #13 + #10);
    end
    else begin
        for I := 1 to Len do
            ReceiveChar(Buffer[I]);
        FlushBuffer;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function  TTnCnx.Send(Data : Pointer; Len : Integer) : integer;
begin
    if Assigned(Socket) then
        Result := Socket.Send(Data, Len)
    else
        Result := -1;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function TTnCnx.SendStr(Data : String) : integer;
begin
    Result := Send(@Data[1], Length(Data));
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TTnCnx.Answer(chAns : Char; chOption : Char);
var
    Buf   : String[3];
begin
{    DebugString('Answer ' + IntToHex(ord(chAns), 2) + ' ' + IntToHex(ord(ChOption), 2) + #13 + #10); }
    Buf := TNCH_IAC + chAns + chOption;
    Socket.Send(@Buf[1], Length(Buf));
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TTnCnx.WillOption(chOption : Char);
begin
    Answer(TNCH_WILL, chOption);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TTnCnx.WontOption(chOption : Char);
begin
    Answer(TNCH_WONT, chOption);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TTnCnx.DontOption(chOption : Char);
begin
    Answer(TNCH_DONT, chOption);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TTnCnx.DoOption(chOption : Char);
begin
    Answer(TNCH_DO, chOption);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TTnCnx.NegociateSubOption(strSubOption : String);
var
    Buf   : String;
begin
{    DebugString('SubNegociation ' +
                IntToHex(ord(strSubOption[1]), 2) + ' ' +
                IntToHex(ord(strSubOption[2]), 2) + #13 + #10); }

    case strSubOption[1] of
    TN_TERMTYPE:
        begin
            if strSubOption[2] = TN_TTYPE_SEND then begin
{                DebugString('Send TermType' + #13 + #10); }
                if Assigned(FOnTermType) then
                    FOnTermType(Self);
                Buf := TNCH_IAC + TNCH_SB + TN_TERMTYPE + TN_TTYPE_IS + FTermType + TNCH_IAC + TNCH_SE;
                Socket.Send(@Buf[1], Length(Buf));
            end;
        end;
    else
{        DebugString('Unknown suboption' + #13 + #10); }
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TTnCnx.NegociateOption(chAction : Char; chOption : Char);
var
    Buf : String;
begin
{    DebugString('Negociation ' + IntToHex(ord(chAction), 2) + ' ' +
                                 IntToHex(ord(ChOption), 2) + #13 + #10); }

    case chOption of
    TN_TRANSMIT_BINARY:
        begin
            if chAction = TNCH_WILL then begin
                Answer(TNCH_DO, chOption);
                RemoteBinMode := TRUE;
                LocalBinMode  := TRUE;
            end
            else if chAction = TNCH_WONT then begin
                if RemoteBinMode then begin
                    RemoteBinMode := FALSE;
                    LocalBinMode  := FALSE;
                end;
            end;
        end;
    TN_ECHO:
        begin
            if chAction = TNCH_WILL then begin
                Answer(TNCH_DO, chOption);
                FLocalEcho := FALSE;
            end
            else if chAction = TNCH_WONT then begin
                FLocalEcho := TRUE;
            end;
            if Assigned(FOnLocalEcho) then
                FOnLocalEcho(self);
        end;
    TN_SUPPRESS_GA:
        begin
            if chAction = TNCH_WILL then begin
                Answer(TNCH_DO, chOption);
                spga := TRUE;
            end;
        end;
    TN_TERMTYPE:
        begin
            if chAction = TNCH_DO then begin
                Answer(TNCH_WILL, chOption);
                FTType := TRUE;
            end;
        end;
    TN_SEND_LOC:
        begin
            if chAction = TNCH_DO then begin
                Answer(TNCH_WILL, chOption);
                if Assigned(FOnSendLoc) then
                    FOnSendLoc(Self);
                Buf := TNCH_IAC + TNCH_SB + TN_SEND_LOC + FLocation + TNCH_IAC + TNCH_SE;
                Socket.Send(@Buf[1], Length(Buf));
            end;
        end;
    TN_EOR:
        begin
            if chAction = TNCH_DO then begin
                Answer(TNCH_WILL, chOption);
                FTType := TRUE;
            end;
        end;
    else
{        Answer(TNCH_WONT, chOption); }
        { Jan Tomasek <xtomasej@feld.cvut.cz> }
        if chAction = TNCH_WILL then
            Answer(TNCH_DONT, chOption)
        else
            Answer(TNCH_WONT, chOption);
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TTnCnx.FlushBuffer;
var
    Buffer : PChar;
    Count  : Integer;
begin
    try
        if FBufferCnt > 0 then begin
            if Assigned(FOnDataAvailable) then begin
                { We need to make a copy for the data because we can reenter   }
                { during the event processing                                  }
                Count := FBufferCnt;             { How much we received        }
                try
                    GetMem(Buffer, Count + 1);       { Alloc memory for the copy   }
                except
                    Buffer := nil;
                end;
                if Buffer <> nil then begin
                    try
                        Move(FBuffer, Buffer^, Count);   { Actual copy             }
                        Buffer[Count] := #0;             { Add a nul byte          }
                        FBufferCnt := 0;                 { Reset receivecounter    }
                        FOnDataAvailable(Self, Buffer, Count); { Call event handler  }
                    finally
                        FreeMem(Buffer, Count + 1);      { Release the buffer      }
                    end;
                end;
            end
            else begin
                FBufferCnt := 0
            end;
        end;
    except
        raise;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TTnCnx.AddChar(Ch : Char);
begin
    FBuffer[FBufferCnt] := Ch;
    Inc(FBufferCnt);
    if FBufferCnt >= SizeOf(FBuffer) then
        FlushBuffer;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TTnCnx.ReceiveChar(Ch : Char);
const
    bIAC         : Boolean = FALSE;
    chVerb       : Char    = #0;
    strSubOption : String  = '';
    bSubNegoc    : Boolean = FALSE;
begin
    if chVerb <> #0 then begin
        NegociateOption(chVerb, Ch);
        chVerb       := #0;
        strSubOption := '';
        Exit;
    end;

    if bSubNegoc then begin
        if Ch = TNCH_SE then begin
            bSubNegoc    := FALSE;
            NegociateSubOption(strSubOption);
            strSubOption := '';
        end
        else
            strSubOption := strSubOption + Ch;
        Exit;
    end;

    if bIAC then begin
        case Ch of
        TNCH_IAC: begin
                      AddChar(Ch);
                      bIAC := FALSE;
                  end;
        TNCH_DO, TNCH_WILL, TNCH_DONT, TNCH_WONT:
                  begin
                      bIAC   := FALSE;
                      chVerb := Ch;
                  end;
        TNCH_EOR:
            begin
                DebugString('TNCH_EOR' + #13 + #10);
                bIAC   := FALSE;
                if Assigned(FOnEOR) then
                    FOnEOR(Self);
            end;
        TNCH_SB:
            begin
{                DebugString('Subnegociation' + #13 + #10); }
                bSubNegoc := TRUE;
                bIAC      := FALSE;
            end;
        else
            DebugString('Unknown ' + IntToHex(ord(Ch), 2) + ' ''' + Ch + '''' + #13 + #10);
            bIAC := FALSE;
        end;

        Exit;
    end;

    case Ch of
    TNCH_EL:
        begin
            DebugString('TNCH_EL' + #13 + #10);
            AddChar(Ch);
        end;
    TNCH_EC:
        begin
            DebugString('TNCH_EC' + #13 + #10);
            AddChar(Ch);
        end;
    TNCH_AYT:
        begin
            DebugString('TNCH_AYT' + #13 + #10);
            AddChar(Ch);
        end;
    TNCH_IP:
        begin
            DebugString('TNCH_IP' + #13 + #10);
            AddChar(Ch);
        end;
    TNCH_AO:
        begin
            DebugString('TNCH_AO' + #13 + #10);
            AddChar(Ch);
        end;
    TNCH_IAC:
        begin
            bIAC := TRUE
        end;
    else
        AddChar(Ch);
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产露脸精彩对白| 欧美激情中文字幕一区二区| 国产风韵犹存在线视精品| 亚洲综合无码一区二区| 欧美精品一区二区三区在线播放| 99国产欧美另类久久久精品| 老司机精品视频一区二区三区| 亚洲视频你懂的| 久久久高清一区二区三区| 在线观看视频一区二区欧美日韩| 国产一区二区美女| 日韩高清不卡在线| 亚洲综合成人在线视频| 国产精品二区一区二区aⅴ污介绍| 91精品国产综合久久精品app| 99re66热这里只有精品3直播| 激情图片小说一区| 秋霞午夜鲁丝一区二区老狼| 亚洲精品va在线观看| 国产精品毛片高清在线完整版| 久久五月婷婷丁香社区| 欧美岛国在线观看| 在线不卡一区二区| 欧美日韩在线不卡| 在线观看一区不卡| 色婷婷亚洲综合| 91免费版pro下载短视频| www.亚洲激情.com| 高清视频一区二区| 国产高清亚洲一区| 国产成人精品亚洲777人妖| 青娱乐精品视频在线| 亚洲成人av福利| 午夜精品视频在线观看| 亚洲丰满少妇videoshd| 亚洲成国产人片在线观看| 一区二区三区在线观看动漫| 亚洲青青青在线视频| 一区二区理论电影在线观看| 亚洲欧美国产毛片在线| 一区二区三区蜜桃| 亚洲影视在线播放| 亚洲电影在线免费观看| 亚洲v日本v欧美v久久精品| 亚洲综合色丁香婷婷六月图片| 一区二区三区加勒比av| 亚洲精品视频自拍| 亚洲超碰精品一区二区| 久久九九全国免费| 精品精品欲导航| 日韩欧美国产一区在线观看| 成人免费黄色在线| 国产精品综合视频| 从欧美一区二区三区| 91在线码无精品| 色综合激情五月| 欧美日本在线视频| 欧美精品一区二区久久婷婷| 久久这里只精品最新地址| 中文字幕免费一区| 一区二区三区日韩精品视频| 图片区小说区区亚洲影院| 日欧美一区二区| 精品亚洲欧美一区| 成人高清免费观看| 在线观看亚洲精品| 精品国产区一区| 亚洲欧美日韩在线| 日韩av中文字幕一区二区| 国产精品一区2区| 在线亚洲精品福利网址导航| 欧美一区二区大片| 国产精品免费视频网站| 亚洲成a人片在线观看中文| 久久激情五月婷婷| 99re热视频这里只精品 | 这里是久久伊人| 久久久精品日韩欧美| 亚洲激情在线播放| 韩国av一区二区三区四区| av在线不卡网| 日韩丝袜情趣美女图片| 亚洲婷婷综合色高清在线| 五月婷婷色综合| 成人一区二区三区在线观看| 欧美亚日韩国产aⅴ精品中极品| 欧美电视剧在线观看完整版| 亚洲欧美视频在线观看视频| 精品一区二区在线观看| 欧美午夜精品理论片a级按摩| 久久久国产精品麻豆| 日韩在线a电影| thepron国产精品| 精品三级av在线| 亚洲一区二区四区蜜桃| 国产一区二区伦理| 欧美一区二区三区喷汁尤物| 亚洲精品成a人| 国产成人亚洲综合a∨婷婷| 91精品午夜视频| 亚洲精品久久嫩草网站秘色| 国产99精品国产| 日韩欧美国产一区二区在线播放| 国产婷婷色一区二区三区在线| 天堂精品中文字幕在线| 色视频成人在线观看免| 亚洲国产精品99久久久久久久久| 美女视频黄免费的久久| 欧美中文字幕亚洲一区二区va在线 | 欧美一区二区在线视频| 依依成人综合视频| 成人免费三级在线| 久久久久久亚洲综合| 蜜桃视频一区二区三区| 欧美特级限制片免费在线观看| 成人免费一区二区三区视频 | 波多野结衣91| 久久蜜桃香蕉精品一区二区三区| 免费高清在线一区| 欧美日韩国产成人在线免费| 一区二区三区中文在线| 色综合久久久久久久久| 中文字幕视频一区| 丁香六月久久综合狠狠色| 久久久国产精品午夜一区ai换脸| 激情欧美日韩一区二区| 精品福利二区三区| 美女视频黄频大全不卡视频在线播放| 欧美日韩国产片| 亚洲h动漫在线| 欧美久久久久久蜜桃| 亚洲18色成人| 欧美日本韩国一区二区三区视频| 亚洲一区二区精品视频| 欧美色倩网站大全免费| 亚洲成人激情社区| 777奇米成人网| 久久超碰97中文字幕| 精品成人a区在线观看| 国产一区在线观看视频| 国产午夜亚洲精品理论片色戒| 国产盗摄一区二区| 国产精品久久午夜夜伦鲁鲁| 91色婷婷久久久久合中文| 一区二区三区中文字幕| 7777精品伊人久久久大香线蕉| 三级在线观看一区二区| 日韩欧美激情四射| 国产一区二区女| 亚洲欧洲av在线| 91成人在线精品| 日本91福利区| 精品国产1区二区| 菠萝蜜视频在线观看一区| 一区二区三区精品在线| 5858s免费视频成人| 久久精品99国产精品日本| 中文字幕精品一区二区精品绿巨人| heyzo一本久久综合| 午夜激情一区二区| 精品国产一区二区精华| 成人18视频日本| 午夜一区二区三区在线观看| 久久伊人中文字幕| 色一情一伦一子一伦一区| 日韩成人免费电影| 国产亚洲精品中文字幕| 欧美在线视频你懂得| 美腿丝袜亚洲一区| 亚洲欧美自拍偷拍色图| 欧美日韩国产综合久久| 国产乱码精品一品二品| 亚洲欧美另类小说| 欧美成人福利视频| 9久草视频在线视频精品| 天天色天天爱天天射综合| 久久久精品国产免大香伊| 日本高清不卡在线观看| 国产在线麻豆精品观看| 玉米视频成人免费看| 久久亚洲私人国产精品va媚药| 91丨九色丨国产丨porny| 久久精工是国产品牌吗| 一区二区三区四区在线播放| 久久综合久久综合九色| 在线一区二区三区四区五区| 九色porny丨国产精品| 亚洲男人的天堂av| 久久久综合九色合综国产精品| 欧美在线影院一区二区| 国产91丝袜在线18| 奇米亚洲午夜久久精品| 亚洲日本成人在线观看| 亚洲精品一区二区三区蜜桃下载 | 久久精品人人做| 欧美日韩在线观看一区二区| 成人永久免费视频| 蜜臀av性久久久久av蜜臀妖精| 亚洲激情校园春色| 中文字幕av资源一区|