Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Como Configurar WinXP como Servidor de FTP???? (https://www.clubdelphi.com/foros/showthread.php?t=25806)

AGAG4 04-10-2005 18:51:12

Como Configurar WinXP como Servidor de FTP????
 
Alguien sabe como configurar una Pc con WinXP como Servidor de FTP????

Quiero Subir y bajar archivos de diferentes Pc's de otras REDES, he encontrado poco por la internet de configurar el XP como servidor.... espero alguien tenga algo de documentación al respecto...

Agradezco cualquier comentario.

roman 04-10-2005 19:10:24

Desconozco si WinXP trae ya algún servidor FTP aunque lo dudo. Yo uso Cerberus que para uso personal es gratuito.

// Saludos

AGAG4 05-10-2005 02:27:42

ok....
 
Lo que quiero es conectarme con un servidor de FTP, pero que no sea de algúna web agena, pero Gracias por su ayuda Roman.....

La duda que tengo también es que si se podría hacer un Servidor FTP con Windows 98 con algunos componentes en Delphi.

Que tenga buen día.

roman 05-10-2005 02:42:53

Cita:

Empezado por AGAG4
La duda que tengo también es que si se podría hacer un Servidor FTP con Windows 98 con algunos componentes en Delphi.

De poderse se puede, por ejemplo con las componentes Indy. Pero no entiendo para qué quieres ponerte a programar uno. Cerberus no es un servidor en una Web ajena; es una aplicación FTP servidor, tal como la que quisieras construir tú mismo, que instalas en tu propia PC.

Yo lo tengo instalado en la pc de mi oficina y cotidianamente subo y bajo archivos desde mi casa con él.

// Saludos

AGAG4 05-10-2005 02:53:05

ok..
 
Voy a probarlo de todas formas gracias Roman....

Sotrono 05-10-2005 11:25:01

Como dice roman, conviene bajarte uno, pero por si te interesa, las Indy traen un ejemplo de servidor FTP.

Bytes...

mamcx 05-10-2005 15:30:46

Win2000 en adelante tiene un servidor integrado, que se instala por Agregar/Quitar componentes de Windows.

Aunque de todas maneras, me parece mejor usar uno gratis. De entrada te recomiendo
http://www.apachefriends.org/en/xampp.html

Te instala Apache, PHP, Perl, MySql, FileZilla (servidor FTP) y otras cosas super facil y con un decente administrador centralizado por Web.

Me parece que es excelente y de paso matas varios pajaros de un tiro.

AGAG4 05-10-2005 16:02:26

ok
 
Gracias por sus comentarios los voy a tomar en cuenta y hacer pruebas....

Que tengan buen día.

AGAG4 07-10-2005 02:48:50

Problemas al Bajar Archivos con Cerberus
 
Cita:

Empezado por roman
Desconozco si WinXP trae ya algún servidor FTP aunque lo dudo. Yo uso Cerberus que para uso personal es gratuito.

// Saludos

Roman, Instale el Servidor FTP Cerberus, todo funciona de maravilla, puedo Subir archivos, borrarlos, crear carpetas, desplazarme entre las carpetas pero no puedo BAJAR ARCHIVOS COMPLETOS, me baja el archivo pero con 0 bytes, ya lo intente bajandolos desde el internet explorer y desde un cliente Demo de los Indys y es la misma, ya revise el Cerberus y revise los derechos de la carpeta que tengo compartida para FTP y tiene todos los derechos de Subir, Bajar, Borrar, etc.... En donde puedo revisar dentro del programa Cerberus para poder bajar archivos????

Agradezco cualquier sugerencia.

Spynosa 07-10-2005 09:20:24

Aqui tienes un servidor usando IdFTPServer de la indy a mi me funciona perfectamente
Código Delphi [-]
 unit Fftp;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   IdBaseComponent, IdComponent, IdTCPServer, IdFTPServer,
   IdFTPList,
   IdSocketHandle,
   idglobal,
   IdHashCRC;
 
 type
   TFTP = class(TForm)
     IdFTPServer1: TIdFTPServer;
     procedure IdFTPServer1ChangeDirectory(ASender: TIdFTPServerThread;
       var VDirectory: String);
     procedure IdFTPServer1GetFileSize(ASender: TIdFTPServerThread;
       const AFilename: String; var VFileSize: Int64);
     procedure IdFTPServer1ListDirectory(ASender: TIdFTPServerThread;
       const APath: String; ADirectoryListing: TIdFTPListItems);
     procedure IdFTPServer1UserLogin(ASender: TIdFTPServerThread;
       const AUsername, APassword: String; var AAuthenticated: Boolean);
     procedure IdFTPServer1RenameFile(ASender: TIdFTPServerThread;
       const ARenameFromFile, ARenameToFile: String);
     procedure FormActivate(Sender: TObject);
     procedure IdFTPServer1CommandXCRCCommand(ASender: TIdCommand);
     procedure IdFTPServer1DeleteFile(ASender: TIdFTPServerThread;
       const APathName: String);
     procedure IdFTPServer1RetrieveFile(ASender: TIdFTPServerThread;
       const AFileName: String; var VStream: TStream);
     procedure IdFTPServer1StoreFile(ASender: TIdFTPServerThread;
       const AFileName: String; AAppend: Boolean; var VStream: TStream);
     procedure IdFTPServer1MakeDirectory(ASender: TIdFTPServerThread;
       var VDirectory: String);
     procedure IdFTPServer1RemoveDirectory(ASender: TIdFTPServerThread;
       var VDirectory: String);
   private
     { Private declarations }
     function TransLatePath( const APathname, homeDir: string ) : string;
   public
     { Public declarations }
   end;
 
 var
   FTP: TFTP;
 
 implementation
 
 {$R *.DFM}
 
 function CalculateCRC( const path: string ) : string;
 var
   f: tfilestream;
   value: dword;
   IdHashCRC32: TIdHashCRC32;
 begin
   IdHashCRC32 := nil;
   f := nil;
   try
     IdHashCRC32 := TIdHashCRC32.create;
     f := TFileStream.create( path, fmOpenRead or fmShareDenyWrite ) ;
     value := IdHashCRC32.HashValue( f ) ;
     result := inttohex( value, 8 ) ;
   finally
     f.free;
     IdHashCRC32.free;
   end;
 end;
 
 function GetSizeOfFile( const APathname: string ) : int64;
 begin
   result := FileSizeByName( APathname ) ;
 end;
 
 
 
 function GetNewDirectory( old, action: string ) : string;
 var
   a: integer;
 begin
   if action = '../' then
   begin
     if old = '/' then
     begin
       result := old;
       exit;
     end;
     a := length( old ) - 1;
     while ( old[a] <> '\' ) and ( old[a] <> '/' ) do
       dec( a ) ;
     result := copy( old, 1, a ) ;
     exit;
   end;
   if ( action[1] = '/' ) or ( action[1] = '\' ) then
     result := action
   else
     result := old + action;
 end;
 function SlashToBackSlash( const str: string ) : string;
 var
   a: dword;
 begin
   result := str;
   for a := 1 to length( result ) do
     if result[a] = '/' then
       result[a] := '\';
 end;
 
 
 function TFTP.TransLatePath( const APathname, homeDir: string ) : string;
 var
   tmppath: string;
 begin
   result := SlashToBackSlash( homeDir ) ;
   tmppath := SlashToBackSlash( APathname ) ;
   if homedir = '/' then
   begin
     result := tmppath;
     exit;
   end;
 
   if length( APathname ) = 0 then
     exit;
   if result[length( result ) ] = '\' then
     result := copy( result, 1, length( result ) - 1 ) ;
   if tmppath[1] <> '\' then
     result := result + '\';
   result := result + tmppath;
 end;
 
 
 
 procedure TFTP.IdFTPServer1ChangeDirectory(ASender: TIdFTPServerThread;
   var VDirectory: String);
 begin
 VDirectory := GetNewDirectory( ASender.CurrentDir, VDirectory ) ;
 end;
 
 procedure TFTP.IdFTPServer1GetFileSize(ASender: TIdFTPServerThread;
   const AFilename: String; var VFileSize: Int64);
 begin
 VFileSize := GetSizeOfFile( TransLatePath( AFilename, ASender.HomeDir ) ) ;
 end;
 
 procedure TFTP.IdFTPServer1ListDirectory(ASender: TIdFTPServerThread;
   const APath: String; ADirectoryListing: TIdFTPListItems);
 procedure AddlistItem( aDirectoryListing: TIdFTPListItems; Filename: string; ItemType: TIdDirItemType; size: int64; date: tdatetime ) ;
   var
     listitem: TIdFTPListItem;
   begin
     listitem := aDirectoryListing.Add;
     listitem.ItemType := ItemType;
     listitem.FileName := Filename;
     listitem.OwnerName := 'anonymous';
     listitem.GroupName := 'all';
     listitem.OwnerPermissions := '---';
     listitem.GroupPermissions := '---';
     listitem.UserPermissions := '---';
     listitem.Size := size;
     listitem.ModifiedDate := date;
   end;
 
 var
   f: tsearchrec;
   a: integer;
 begin
   ADirectoryListing.DirectoryName := apath;
 
   a := FindFirst( TransLatePath( apath, ASender.HomeDir ) + '*.*', faAnyFile, f ) ;
   while ( a = 0 ) do
   begin
     if ( f.Attr and faDirectory > 0 ) then
       AddlistItem( ADirectoryListing, f.Name, ditDirectory, f.size, FileDateToDateTime( f.Time ) )
     else
       AddlistItem( ADirectoryListing, f.Name, ditFile, f.size, FileDateToDateTime( f.Time ) ) ;
     a := FindNext( f ) ;
   end;
 
   FindClose( f ) ;
 end;
 
 
 procedure TFTP.IdFTPServer1UserLogin(ASender: TIdFTPServerThread;
   const AUsername, APassword: String; var AAuthenticated: Boolean);
 begin
 AAuthenticated := ( AUsername = 'imagina' ) and ( APassword = 'sport' ) ;
   if not AAuthenticated then
     exit;
   ASender.HomeDir := '/';
   asender.currentdir := '/';
 end;
 
 procedure TFTP.IdFTPServer1RenameFile(ASender: TIdFTPServerThread;
   const ARenameFromFile, ARenameToFile: String);
 begin
 if not MoveFile( pchar( TransLatePath( ARenameFromFile, ASender.HomeDir ) ) , pchar( TransLatePath( ARenameToFile, ASender.HomeDir ) ) ) then
     RaiseLastWin32Error;
 end;
 
 procedure TFTP.FormActivate(Sender: TObject);
 begin
  with IdFTPServer1.CommandHandlers.add do
   begin
     Command := 'XCRC';
     OnCommand := IdFTPServer1CommandXCRCCommand;
   end;
   IdFTPServer1.Active := true;
 end;
 
 
 
 
 procedure TFTP.IdFTPServer1CommandXCRCCommand(ASender: TIdCommand);
 // note, this is made up, and not defined in any rfc.
 var
   s: string;
 begin
   with TIdFTPServerThread( ASender.Thread ) do
   begin
     if Authenticated then
     begin
       try
         s := ProcessPath( CurrentDir, ASender.UnparsedParams ) ;
         s := TransLatePath( s, TIdFTPServerThread( ASender.Thread ) .HomeDir ) ;
         ASender.Reply.SetReply( 213, CalculateCRC( s ) ) ;
       except
         ASender.Reply.SetReply( 500, 'file error' ) ;
       end;
     end;
   end;
 end;
 
 procedure TFTP.IdFTPServer1DeleteFile(ASender: TIdFTPServerThread;
   const APathName: String);
 begin
 DeleteFile( pchar( TransLatePath( ASender.CurrentDir + '/' + APathname, ASender.HomeDir ) ) ) ;
 end;
 
 procedure TFTP.IdFTPServer1RetrieveFile(ASender: TIdFTPServerThread;
   const AFileName: String; var VStream: TStream);
 begin
 VStream := TFileStream.create( translatepath( AFilename, ASender.HomeDir ) , fmopenread or fmShareDenyWrite ) ;
 end;
 
 procedure TFTP.IdFTPServer1StoreFile(ASender: TIdFTPServerThread;
   const AFileName: String; AAppend: Boolean; var VStream: TStream);
 begin
 if FileExists( translatepath( AFilename, ASender.HomeDir ) ) and AAppend then
   begin
     VStream := TFileStream.create( translatepath( AFilename, ASender.HomeDir ) , fmOpenWrite or fmShareExclusive ) ;
     VStream.Seek( 0, soFromEnd ) ;
   end
   else
     VStream := TFileStream.create( translatepath( AFilename, ASender.HomeDir ) , fmCreate or fmShareExclusive ) ;
 end;
 
 procedure TFTP.IdFTPServer1MakeDirectory(ASender: TIdFTPServerThread;
   var VDirectory: String);
 begin
 MkDir( TransLatePath( VDirectory, ASender.HomeDir ) ) ;
 end;
 
 procedure TFTP.IdFTPServer1RemoveDirectory(ASender: TIdFTPServerThread;
   var VDirectory: String);
 begin
 RmDir( TransLatePath( VDirectory, ASender.HomeDir ) ) ;
 end;
 
 end.

un saludo

roman 07-10-2005 16:16:26

Cita:

Empezado por AGAG4
En donde puedo revisar dentro del programa Cerberus para poder bajar archivos????

Pues no sé qué decirte. He instalado muchas veces ese servidor tanto en Win200 como en WinXP sin ningún problema, ni recuerdo haber tenido que hacer algo especial para su configuración. En la ventana del Cerberus te va marcando los accesos al servidor; quizá de ahí puedas ver qué está ocurriendo. Por otra parte, pudiera ser que tengas un cortafuegos que esté impidiendo la entrada.

Spynosa

Te agradezco tu aporte, creo que a muchos les interesará tu ejemplo. En las Indy recuerdo haber visto un ejemplo de cliente pero no así de servidor FTP.

// Saludos

AGAG4 07-10-2005 16:24:00

Ok
 
Esta muy completo su ejemplo Spynosa, pero porque no pone algun link para bajarlo ya sea por ftp ó enviarlo por correo.

Ahora llegue en la mañana, y encendí la PC donde esta el FTP Server de Cerbeus y me encuentro con la novedad de que ahora ya puedo bajar archivos, que cosas tan raras, ayer reinicie la PC y nada, será que tiene win98 SE y tiene que estar en un WinServer ó XP????

Gracias por sus comentarios....

AGAG4 07-10-2005 16:45:39

Me Equicoque
 
Retiro lo dicho anteriormente que me había funcionado, lo que paso es que no tenía abierto el Cerberus, hice la prueba en la PC donde esta instalado este FTP....Mil Disculpas Sigue el problema no puedo descargar archivos....

Sotrono 07-10-2005 18:19:32

Cita:

Empezado por roman
En las Indy recuerdo haber visto un ejemplo de cliente pero no así de servidor FTP.

Los ejemplos de la version 10 si traen uno. Pero tuve algunos problemas para hacer que funcione.

AGAG4 07-10-2005 22:29:47

ok
 
Al hacer pruebas con varios servidores FTP, me encontre con el GuildFTPd, con este no batalle para bajar los archivos....

www.guildftpd.com

Saludos....


La franja horaria es GMT +2. Ahora son las 22:41:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi