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

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

?? tncnx.pas

?? Delphi 網絡通信協議代碼,是多種網絡協議的實現代碼
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
        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久久精品费精品国产一区二区| 成人一级片在线观看| 国产精品亚洲一区二区三区在线| 国产一区激情在线| 成人av在线资源| 日本丰满少妇一区二区三区| 91福利视频网站| 欧美美女黄视频| 日韩欧美另类在线| wwwwxxxxx欧美| 国产精品久久久久久久久动漫 | 91精品国产全国免费观看| 欧美精品日日鲁夜夜添| 337p亚洲精品色噜噜噜| 久久综合久色欧美综合狠狠| 久久九九久精品国产免费直播| 国产欧美一区二区在线| 亚洲三级免费观看| 日本最新不卡在线| 成人晚上爱看视频| 欧美在线综合视频| 精品毛片乱码1区2区3区| 欧美国产一区在线| 亚洲大片在线观看| 国产综合久久久久影院| 91免费版在线| 欧美mv和日韩mv国产网站| 国产精品麻豆欧美日韩ww| 亚洲高清视频的网址| 国产精品影音先锋| 欧美男男青年gay1069videost| 精品国产髙清在线看国产毛片| 日韩伦理免费电影| 精品一区二区三区免费| 91网站在线播放| 日韩欧美一级二级| 亚洲视频小说图片| 国内久久婷婷综合| 欧美日韩一级黄| 中文字幕成人网| 日韩精品电影一区亚洲| 波多野结衣精品在线| 91精品国产91综合久久蜜臀| 亚洲欧美综合色| 卡一卡二国产精品| 欧美日韩在线电影| 亚洲日本中文字幕区| 国产福利电影一区二区三区| 91精品国产综合久久久久 | 色av综合在线| 日本一区二区三级电影在线观看| 日韩精品高清不卡| 欧美日韩一级黄| 一区二区三区四区在线| 国产成人高清在线| 欧美精品一区二区三区很污很色的 | 亚洲免费在线看| 美女一区二区在线观看| 4hu四虎永久在线影院成人| 亚洲日本中文字幕区| 成人精品视频.| 日韩欧美一区二区不卡| 亚洲成人1区2区| 欧美色图激情小说| 亚洲精品成人天堂一二三| 99免费精品视频| 国产精品乱人伦| 成人黄色综合网站| 中文字幕一区二区不卡| 成人丝袜18视频在线观看| 久久精品视频免费| 99视频超级精品| 国产精品久久久久aaaa樱花| 福利一区福利二区| 国产欧美视频在线观看| 成人高清免费观看| 中文字幕在线不卡| 色综合天天在线| 亚洲精品写真福利| 9191成人精品久久| 捆绑变态av一区二区三区| 久久久亚洲精华液精华液精华液| 久久97超碰色| 国产日韩精品一区| 91香蕉视频在线| 亚洲一区二区三区视频在线| 欧美日韩亚洲综合一区| 日韩精品久久理论片| 26uuu欧美日本| 成人激情免费视频| 一区二区在线观看免费 | 麻豆精品一二三| 国产欧美一区二区精品婷婷| 91免费版在线看| 偷拍自拍另类欧美| 欧美精品一区二区三区高清aⅴ| 国产精品一区二区久久不卡| 综合在线观看色| 欧美日韩免费高清一区色橹橹 | 国产香蕉久久精品综合网| 97久久久精品综合88久久| 婷婷综合在线观看| 久久久久久久久久久黄色| 91老师片黄在线观看| 日本人妖一区二区| 亚洲欧美自拍偷拍| 日韩免费视频一区| 91香蕉视频污在线| 国产在线乱码一区二区三区| 亚洲麻豆国产自偷在线| 精品电影一区二区三区| 欧洲视频一区二区| 国产成人综合视频| 婷婷六月综合网| 亚洲乱码国产乱码精品精可以看| 日韩欧美国产综合一区| 99久久99久久久精品齐齐| 美女网站在线免费欧美精品| 亚洲欧美视频一区| 久久久久久久久97黄色工厂| 欧美日韩三级视频| 91视频国产观看| 国产99久久久久| 麻豆国产欧美日韩综合精品二区 | 一本到不卡精品视频在线观看| 蜜臀av亚洲一区中文字幕| 亚洲欧美日韩国产一区二区三区| 久久综合色婷婷| 欧美一区二区成人| 欧美丝袜自拍制服另类| 北条麻妃国产九九精品视频| 国产揄拍国内精品对白| 日精品一区二区三区| 一区二区三区中文在线观看| 国产精品成人在线观看| 久久久天堂av| 精品国产乱码久久久久久影片| 欧美色手机在线观看| 91搞黄在线观看| 日本久久电影网| 在线影视一区二区三区| 91视频免费看| 在线亚洲+欧美+日本专区| 99国产精品国产精品毛片| 国产成人av网站| 国产精品一级黄| 成人午夜看片网址| 国产suv一区二区三区88区| 国产成人在线视频免费播放| 国产老女人精品毛片久久| 国产综合久久久久久鬼色| 韩国中文字幕2020精品| 国产主播一区二区| 国产成人午夜高潮毛片| 丁香网亚洲国际| 91色在线porny| 欧美视频中文字幕| 欧美一区二区三区视频免费 | 国产成人综合亚洲网站| 成人av免费在线播放| 99久久免费精品| 在线观看不卡视频| 欧美绝品在线观看成人午夜影视| 欧美丰满一区二区免费视频| 精品久久人人做人人爰| 国产欧美视频一区二区| 亚洲另类在线一区| 日韩av电影免费观看高清完整版 | 中文字幕一区三区| 亚洲一区二区在线视频| 琪琪一区二区三区| 懂色一区二区三区免费观看| 91片在线免费观看| 日韩一级二级三级| 国产精品进线69影院| 亚洲一区二区成人在线观看| 毛片不卡一区二区| 91丝袜国产在线播放| 日韩视频免费直播| 国产精品久久久久久久久免费樱桃 | 国产日韩欧美a| 国产精品国产精品国产专区不片| 欧美国产日本视频| 午夜精品免费在线| 国产精品影视在线观看| 欧美视频在线观看一区| 久久久久亚洲蜜桃| 婷婷开心久久网| thepron国产精品| 日韩欧美专区在线| 亚洲黄色免费电影| 国产精品正在播放| 在线综合亚洲欧美在线视频| 国产精品不卡视频| 极品尤物av久久免费看|