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

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

?? utcp.pas

?? windows rootkit 驅動級的后門! 絕對推薦!
?? PAS
字號:
unit UTcp;
interface
uses
 Windows,Winsock2,USockets,UList;

type
 TSockAddrTcp=TSockAddr;
 
 TTcpBase=class(TSocketBase)
 public
  constructor Create;
  function SendData(AData:Pointer;ASize:Integer;ASocket:TSocket=INVALID_SOCKET):Boolean;
  function RecvData(AData:Pointer;ASize:Integer;ATimeout:Cardinal=0;AFillBuffer:Boolean=False;ASocket:TSocket=INVALID_SOCKET):Integer;
 end;

 TTcpClient=class(TTcpBase)
 private
  FConnected:Boolean;
 public
  constructor Create;
  function Connect:Boolean;
  procedure Disconnect;
  function RecreateSocket:Boolean;
  function SetHost(AHost:string;APort:Word):Boolean;
  function GetHost:TSockAddrTcp;
  function SendData(AData:Pointer;ASize:Integer):Boolean;
  function RecvData(AData:Pointer;ASize:Integer;ATimeOut:Cardinal=0;AFillBuffer:Boolean=False):Integer;
 end;

 TTcpServer=class;

 TTcpServerOnRecvData=procedure(AServerClient:Cardinal;AData:Pointer;ASize:Integer;AHost:TSockAddrTcp);stdcall;
 TTcpServerOnAccept=procedure(AServerClient:Cardinal;AHost:TSockAddrTcp);stdcall;
 TTcpServerOnConnectionClosed=procedure(AServerClient:Cardinal;AHost:TSockAddrTcp);stdcall;

 PTcpServerConnection=^TTcpServerConnection;
 TTcpServerConnection=record
  Server:TTcpServer;
  Sock:TSocket;
  ThreadHandle:THandle;
  ThreadActive:Boolean;
  Host:TSockAddr;
 end;

 TTcpServer=class(TTcpBase)
 private
  FListenThreadActive:Boolean;
  FListenThreadHandle:THandle;
  FConnections:TList;
  FLocalHost:TSockAddr;
  FOnAccept:TTcpServerOnAccept;
  FOnRecvData:TTcpServerOnRecvData;
  FOnConnectionClosed:TTcpServerOnConnectionClosed;
 public
  property OnAccept:TTcpServerOnAccept read FOnAccept write FOnAccept;
  property OnRecvData:TTcpServerOnRecvData read FOnRecvData write FOnRecvData;
  property OnConnectionClosed:TTcpServerOnConnectionClosed read FOnConnectionClosed write FOnConnectionClosed;
  constructor Create;
  destructor Destroy; override;
  function Start(APort:Word;AAdaptor:Cardinal=INADDR_ANY):Boolean;
  procedure Stop;
  function SendData(AData:Pointer;ASize:Integer;AServerClient:Cardinal):Boolean;
  function RecvData(AData:Pointer;ASize:Integer;AServerClient:Cardinal;AFillBuffer:Boolean=False):Integer;
  function CloseConnection(AServerClient:Cardinal):Boolean;
  function GetConnectionCount:Integer;
  function GetConnection(AIndex:Integer):PTcpServerConnection;
  function IsRunning:Boolean;
 end;

implementation


{ TTcpBase }

constructor TTcpBase.Create;
begin
 inherited Create;
 FSocketFamily:=AF_INET;
 FSocketType:=SOCK_STREAM;
 FSocketProtocol:=IPPROTO_TCP;
end;

function TTcpBase.SendData(AData:Pointer;ASize:Integer;ASocket:TSocket=INVALID_SOCKET):Boolean;
var
 LRet,LRemaining:Integer;
 LPB:PByte;
 LSocket:TSocket;
begin
 Result:=False;
 if not FSocketActive then Exit;
 if ASocket=INVALID_SOCKET then LSocket:=FSocket
 else LSocket:=ASocket;

 LPB:=AData;
 LRemaining:=ASize;
 while LRemaining>0 do
 begin
  LRet:=send(LSocket,LPB^,LRemaining,0);
  if LRet=SOCKET_ERROR then Break;
  Dec(LRemaining,LRet);
  Inc(LPB,LRet);
 end;
 Result:=LRemaining=0;
end;

function TTcpBase.RecvData(AData:Pointer;ASize:Integer;ATimeout:Cardinal=0;AFillBuffer:Boolean=False;ASocket:TSocket=INVALID_SOCKET):Integer;
var
 LRet,LRemaining:Integer;
 LPB:PByte;
 LSocket:TSocket;
 LSetIn,LSetEr:TFDSet;
 LTimeVal:TTimeVal;
 LPTimeVal:PTimeVal;
 LTime1,LTime2,LTimeout:Cardinal;
begin
 Result:=0;
 if not FSocketActive then Exit;

 if ASocket=INVALID_SOCKET then LSocket:=FSocket
 else LSocket:=ASocket;

 FD_ZERO(LSetIn);
 FD_SET(LSocket,LSetIn);
 FD_ZERO(LSetEr);
 FD_SET(LSocket,LSetEr);

 LRet:=0;
 LPB:=AData;
 LRemaining:=ASize;
 LPTimeVal:=nil;
 LTime1:=GetTickCount;

 while LRemaining>0 do
 begin
  if ATimeout>0 then
  begin
   LTime2:=GetTickCount;
   if LTime2-LTime1>=ATimeout then Break;
   LTimeout:=ATimeout-(LTime2-LTime1);
   LTimeVal.tv_sec:=LTimeout div 1000;
   LTimeVal.tv_usec:=LTimeout mod 1000;
   LPTimeVal:=@LTimeVal;
  end;

  LRet:=select(0,@LSetIn,nil,@LSetEr,LPTimeVal);

  if LRet=SOCKET_ERROR then Break;
  if LRet=0 then Break;

  if FD_ISSET(LSocket,LSetIn) then
  begin
   LRet:=recv(LSocket,LPB^,LRemaining,0);
   if not AFillBuffer then Break;
   if LRet=SOCKET_ERROR then Break;

   Dec(LRemaining,LRet);
   Inc(LPB,LRet);
   if LRet=0 then Break;
  end;
  if FD_ISSET(LSocket,LSetEr) then
  begin
   LRet:=0;
   Break;
  end;
 end;
 if LRet=SOCKET_ERROR then Result:=0
 else if AFillBuffer then Result:=ASize-LRemaining
 else Result:=LRet;
end;


{ TTcpClient }

constructor TTcpClient.Create;
begin
 inherited;
 FConnected:=False;
end;

function TTcpClient.SetHost(AHost:string;APort:Word):Boolean;
begin
 if APort<>0 then FHost.sin_port:=htons(APort);
 if Length(AHost)>0 then Result:=inherited SetHost(AHost)
 else Result:=not (APort=0);
end;

function TTcpClient.GetHost:TSockAddrTcp;
begin
 Result:=FHost;
end;

function TTcpClient.Connect:Boolean;
begin
 Result:=False;
 if FConnected then Exit;
 if not FSocketActive then
  if not CreateSocket then Exit;

 FConnected:=not (Winsock2.connect(FSocket,@FHost,SOCKADDR_LEN)=SOCKET_ERROR);
 Result:=FConnected;
end;

procedure TTcpClient.Disconnect;
begin
 if FConnected then RecreateSocket;
 FConnected:=False;
end;

function TTcpClient.RecreateSocket:Boolean;
begin
 CloseMainSocket;
 Result:=CreateSocket;
end;

function TTcpClient.SendData(AData:Pointer;ASize:Integer):Boolean;
begin
 if FConnected then Result:=inherited SendData(AData,ASize)
 else Result:=False;
end;

function TTcpClient.RecvData(AData:Pointer;ASize:Integer;ATimeout:Cardinal=0;AFillBuffer:Boolean=False):Integer;
begin
 if FConnected then Result:=inherited RecvData(AData,ASize,ATimeout,AFillBuffer)
 else Result:=0;
end;


{ TTcpServer }

function ClientThread(AArgs:Pointer):Cardinal; stdcall;
var
 LPClient:PTcpServerConnection;
 LRet:Integer;
 LBuf:array[0..65535] of Char;
begin
 LPClient:=AArgs;
 with LPClient^ do
 begin
  while True do
  begin
   ZeroMemory(@LBuf,SizeOf(LBuf));
   LRet:=recv(Sock,LBuf,SizeOf(LBuf),0);
   if (LRet=0) or (LRet=SOCKET_ERROR) then Break;
   if @Server.FOnRecvData<>nil then Server.FOnRecvData(Sock,@LBuf,LRet,Host);
  end;

  if @Server.FOnConnectionClosed<>nil then Server.FOnConnectionClosed(Sock,Host);
  closesocket(Sock);
  ThreadHandle:=INVALID_HANDLE_VALUE;
  ThreadActive:=False;
  Server.FConnections.Delete(Server.FConnections.IndexOf(LPClient));
 end;
 Dispose(LPClient);
 Result:=0;
 ExitThread(0);
end;

function DoListen(AArgs:Pointer):Cardinal; stdcall;
var
 LServer:TTcpServer;
 LHost:TSockAddr;
 LHostLen:Integer;
 LPClient:PTcpServerConnection;
 LTID:Cardinal;
 LSock:TSocket;
begin
 LServer:=TTcpServer(AArgs);
 with LServer do
 begin
  if not ((bind(FSocket,@FLocalHost,SOCKADDR_LEN)=SOCKET_ERROR)
   or (listen(FSocket,256)=SOCKET_ERROR)) then
  while True do
  begin
   LHostLen:=SOCKADDR_LEN;
   LSock:=accept(FSocket,@LHost,@LHostLen);
   if LSock=INVALID_SOCKET then Break;
   if @FOnAccept<>nil then FOnAccept(LSock,LHost);
   New(LPClient);
   with LPClient^ do
   begin
    Server:=LServer;
    Sock:=LSock;
    Host:=LHost;
    ThreadHandle:=CreateThread(nil,0,@ClientThread,LPClient,CREATE_SUSPENDED,LTID);
    ThreadActive:=ThreadHandle<>INVALID_HANDLE_VALUE;
    if ResumeThread(ThreadHandle)=DWORD(-1) then Dispose(LPClient)
    else FConnections.Add(LPClient);
   end;
  end;
  FListenThreadActive:=False;
  FListenThreadHandle:=INVALID_HANDLE_VALUE;
 end;
 Result:=0;
 ExitThread(0);
end;

constructor TTcpServer.Create;
begin
 inherited;
 @OnRecvData:=nil;
 @OnAccept:=nil;
 @OnConnectionClosed:=nil;
 FConnections:=TList.Create;
 FListenThreadHandle:=INVALID_HANDLE_VALUE;
 FListenThreadActive:=False;
 FLocalHost.sin_family:=AF_INET;
 FLocalHost.sin_port:=0;
 FLocalHost.sin_addr.S_addr:=INADDR_NONE;
end;

destructor TTcpServer.Destroy;
begin
 Stop;
 FConnections.Free;
 inherited;
end;

function TTcpServer.Start(APort:Word;AAdaptor:Cardinal=INADDR_ANY):Boolean;
var
 LTID:Cardinal;
begin
 Result:=False;
 if not FSocketActive then
  if not CreateSocket then Exit; 
 FLocalHost.sin_port:=htons(APort);
 FLocalHost.sin_addr.S_addr:=AAdaptor;
 FListenThreadHandle:=CreateThread(nil,0,@DoListen,Self,0,LTID);
 FListenThreadActive:=not (FListenThreadHandle=INVALID_HANDLE_VALUE);
 Result:=FListenThreadActive;
end;

procedure TTcpServer.Stop;
var
 LI:Integer;
 LPClient:PTcpServerConnection;
begin
 if FListenThreadActive then FListenThreadActive:=not TerminateThread(FListenThreadHandle,0);
 if not FListenThreadActive then FListenThreadHandle:=INVALID_HANDLE_VALUE;
 for LI:=0 to FConnections.Count-1 do
 begin
  LPClient:=FConnections[LI];
  TerminateThread(LPClient^.ThreadHandle,0);
  closesocket(LPClient^.Sock);
  Dispose(LPClient);
 end;
 FConnections.Clear;
end;

function TTcpServer.SendData(AData:Pointer;ASize:Integer;AServerClient:Cardinal):Boolean;
begin
 Result:=inherited SendData(AData,ASize,AServerClient);
end;

function TTcpServer.RecvData(AData:Pointer;ASize:Integer;AServerClient:Cardinal;AFillBuffer:Boolean=False):Integer;
begin
 Result:=inherited RecvData(AData,ASize,0,AFillBuffer,AServerClient);
end;

function TTcpServer.CloseConnection(AServerClient:Cardinal):Boolean;
var
 LI:Integer;
 LPClient:PTcpServerConnection;
begin
 Result:=False;
 for LI:=0 to FConnections.Count-1 do
 begin
  LPClient:=FConnections[LI];
  with LPClient^ do
  if Sock=AServerClient then
  begin
   TerminateThread(ThreadHandle,0);
   FConnections.Delete(LI);
   closesocket(Sock);
   Dispose(LPClient);
   Result:=True;
   Break;
  end;
 end;
end;


function TTcpServer.GetConnectionCount:Integer;
begin
 if FConnections=nil then Result:=0
 else Result:=FConnections.Count
end;

function TTcpServer.GetConnection(AIndex:Integer):PTcpServerConnection;
begin
 if (FConnections=nil) or (AIndex<0) or (AIndex>=FConnections.Count) then Result:=nil
 else Result:=FConnections[AIndex];
end;

function TTcpServer.IsRunning:Boolean;
begin
 Result:=FListenThreadActive;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美天堂一区二区三区| 久久一区二区三区四区| 精品国产麻豆免费人成网站| 一区在线播放视频| 韩日欧美一区二区三区| 色狠狠综合天天综合综合| 久久久精品tv| 久久精品国内一区二区三区| 91国产免费观看| 国产精品久久久久一区| 国产一区二区在线视频| 8x8x8国产精品| 亚洲国产欧美另类丝袜| 97久久久精品综合88久久| 精品国产一区二区三区忘忧草| 亚洲午夜在线观看视频在线| 97久久超碰国产精品| 国产亚洲综合性久久久影院| 久久av中文字幕片| 日韩视频一区二区| 日韩精品乱码免费| 7777精品伊人久久久大香线蕉的| 亚洲免费av高清| 91影院在线免费观看| 亚洲欧洲日韩av| av一区二区三区| 日韩伦理电影网| 99久久精品国产网站| 国产精品久久国产精麻豆99网站| 国产高清亚洲一区| 久久欧美一区二区| 国产一区二区福利| 日本一区二区三区久久久久久久久不| 精品一区二区三区免费观看| 91精品在线免费| 美美哒免费高清在线观看视频一区二区 | 国产精品911| 久久久欧美精品sm网站| 国产一区二区三区日韩| 国产婷婷一区二区| 成人美女视频在线观看18| 国产亚洲综合av| 97国产精品videossex| **欧美大码日韩| 欧美亚洲国产一卡| 视频一区中文字幕| 欧美成人性战久久| 成人一道本在线| 一区二区三区在线影院| 欧美电影一区二区| 韩国毛片一区二区三区| 亚洲国产精品av| 色婷婷综合激情| 日本免费在线视频不卡一不卡二| 精品国产一区二区三区四区四| 国产精品亚洲а∨天堂免在线| 国产精品久久久久久久久晋中 | 亚洲激情中文1区| 欧美群妇大交群的观看方式| 日韩主播视频在线| 久久综合色一综合色88| 一本色道久久加勒比精品| 日本中文在线一区| 中文字幕高清不卡| 欧美在线|欧美| 久久99精品久久久| 亚洲欧美国产三级| 精品美女一区二区三区| 色婷婷久久综合| 国精产品一区一区三区mba视频| 国产精品久久久久久久岛一牛影视| 欧美午夜免费电影| 国产成人精品综合在线观看 | 国产一区二区影院| 一区二区三区日韩欧美精品| 精品国产a毛片| 在线免费观看视频一区| 国产黑丝在线一区二区三区| 亚洲h动漫在线| 亚洲欧洲精品成人久久奇米网| 欧美一区二区久久| 色综合网色综合| 国产精品一区二区三区乱码| 亚洲第一福利视频在线| 日本一区二区不卡视频| 日韩精品一区二区三区四区视频| 欧美综合视频在线观看| 国产精品一区二区91| 蜜臀av性久久久久蜜臀aⅴ | 欧美日韩国产美女| 99国内精品久久| 懂色中文一区二区在线播放| 蜜臀av一区二区在线免费观看| 一区二区三区精品视频在线| 国产清纯美女被跳蛋高潮一区二区久久w | 亚洲欧洲精品天堂一级| 精品国产一区二区三区四区四| 精品视频一区三区九区| 99久久精品国产网站| 成人午夜在线视频| 国产精品99久久久久久久女警 | 欧美色手机在线观看| 成人性生交大片免费看在线播放| 狠狠色综合色综合网络| 婷婷中文字幕综合| 亚洲成人免费影院| 亚洲福中文字幕伊人影院| 亚洲中国最大av网站| 亚洲在线视频网站| 亚洲一区二区视频在线| 亚洲精品视频在线| 亚洲综合色视频| 亚洲午夜在线视频| 婷婷久久综合九色综合伊人色| 艳妇臀荡乳欲伦亚洲一区| 亚洲欧美激情视频在线观看一区二区三区| 国产精品色眯眯| 亚洲天堂免费看| 一区二区三区在线免费播放| 亚洲美女免费视频| 亚洲一区二区欧美激情| 亚洲成av人片在线观看无码| 亚洲成av人在线观看| 日本美女视频一区二区| 久久97超碰国产精品超碰| 九色综合狠狠综合久久| 国产真实乱子伦精品视频| 国产福利91精品一区二区三区| 懂色av一区二区夜夜嗨| 91在线码无精品| 欧美日韩小视频| 欧美va亚洲va| 中文字幕在线一区| 亚洲一区二区三区激情| 久久91精品国产91久久小草| 成人黄色免费短视频| 色88888久久久久久影院按摩| 欧美日韩一区在线| 精品蜜桃在线看| 亚洲图片另类小说| 日韩不卡免费视频| 国产一区二区0| 色悠悠亚洲一区二区| 欧美精品成人一区二区三区四区| 日韩精品一区二区三区在线观看 | 中文字幕二三区不卡| 一区二区三区四区在线播放| 午夜精品123| 国产精品自产自拍| 在线一区二区观看| 精品理论电影在线观看| 亚洲视频 欧洲视频| 久久99这里只有精品| 色哟哟国产精品免费观看| 日韩欧美亚洲国产精品字幕久久久| 亚洲国产成人一区二区三区| 一区二区三区四区高清精品免费观看| 日本v片在线高清不卡在线观看| 粉嫩一区二区三区性色av| 欧美偷拍一区二区| 国产精品国产成人国产三级| 日韩精品久久久久久| 成人av先锋影音| 精品久久久久久无| 亚洲一区二区不卡免费| 成人精品在线视频观看| 欧美一区中文字幕| 亚洲综合在线视频| 不卡高清视频专区| 久久色中文字幕| 日本不卡在线视频| 欧美影视一区二区三区| 国产精品久久久久久久蜜臀| 久久99最新地址| 欧美一区二区三区免费| 亚洲综合视频在线观看| 99r精品视频| 中国色在线观看另类| 精品午夜一区二区三区在线观看| 欧美美女网站色| 一区二区三区毛片| 99久久99久久精品国产片果冻| 久久嫩草精品久久久久| 免费观看一级特黄欧美大片| 91黄色免费观看| 亚洲精品国产精品乱码不99| 成人短视频下载| 中文字幕在线一区| 国产成人午夜精品影院观看视频| 精品国产一区二区在线观看| 日韩国产精品91| 亚洲免费伊人电影| 欧美高清hd18日本| 91亚洲精华国产精华精华液| 免费观看日韩电影| 婷婷丁香久久五月婷婷| 亚洲色图一区二区| 成人午夜免费视频| 国产欧美日韩在线视频| 国产麻豆一精品一av一免费|