Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Ver lista de archivos tipo ftp (https://www.clubdelphi.com/foros/showthread.php?t=26910)

JMGR 07-11-2005 14:57:32

Ver lista de archivos tipo ftp
 
Buenas...

La idea es poder acceder a mi PC desde cualquier otro que tenga conexion a Internet, pero solo yo claro... :D

No me vale un servidor ftp, ya que no todos los pcs tienen un cliente ftp instalado y tener que bajarme uno cada vez no interesa...

He estado probando con un servidor web pero aparte de que no me fio en el tema de la seguridad, es un coñazo generar paginas web con el contenido de las discos duros/carpetas...

Tambien probe el sslexplorer pero no me entero de como configurarlo y no consigo acceder....

Asi que al final he optado por un servidor web que sólo permite bajar un programa cliente sencillo, que conecta por sockets con el servidor, y es aqui donde necesito ayuda...ya que me gustaria poder ver, en este programa cliente los discos duros/carpetas en plan los tipicos clientes ftp...
Lo que se me ha ocurrido es algo como recorrer un filelistbox en el server e ir mandando los nombres al cliente, que los muestra en un listview, pero claro con esto solo podria "ver" los archivos de una carpeta, no todo el contenido, archivos y carpetas...

¿Alguien sabe como puedo hacerlo?
¿Alguna sugerencia?

Muchas gracias y un saludo.
Juanma

[Gunman] 07-11-2005 15:12:30

Existe el protocolo SSH (Secure Shell), evolución del telnet (más seguro). Windows lleva incorporado un cliente telnet no se si lleva alguno de SSH. Aquí tienes más información:
http://es.wikipedia.org/wiki/SSH

PD: Eso de que todos los sistemas no llevan un cliente ftp es falso, todos los sistemas windows (como mínimo a partir de Win98) llevan uno, el Explorer. Escribe en tu explorer lo siguiente: ftp://ftp.borland.com. Podrás comprobar que se conecta al servidor sin ningún problema.

JMGR 07-11-2005 15:20:51

primero que nada gracias por la respuesta, voy a ver de que va...

Y segundo, si, el explorer puede actuar como servidor ftp pero...lo has probado como tal...? es que es bastante malo... :rolleyes:

Gracias y un saludo.

Casimiro Notevi 07-11-2005 19:29:34

Tienes un cliente ftp, ejemplo: ( inicio->ejecutar->cmd y pulsas enter, ahora teclea ftp.borland.com
usuario: anonymous login: elquesea@mio.es ) Ya estás conectado al servidor ftp de borland

tienes los comandos habituales, teclea ? o help para verlos todos

[Gunman] 07-11-2005 20:46:10

Cierto, cualquier windows compatible con internet, al igual que cualquier version de linux compatible con internet, un cliente ftp integrado, otra cosa es que no te guste...

[Gunman] 07-11-2005 20:47:16

Perdón... Se me olvidó decirte que el TelNet es un protocolo de control Remoto, al igual que el SSH que es su evolución (como te he dicho) y el VNC.

JMGR 07-11-2005 20:56:13

buenas...

gracias por la respuesta pero es que necesitaria un cliente FTP que me permitiera poder enviar comandos personalizados. Estuve probando mil formas de usar el explorer y ninguna me convencia porque me fallaba bastante, por eso no quiero usar ftp... :rolleyes:

Por otro lado, ya consegui mas o menos lo que queria con un listbox en el cliente que se llena con los datos de otro listbox, en el servidor, que envio mediante la instruccion:

socket.SendText(lbres.Items.text);

y funciona bien, a no ser que el numero de archivos sea muy grande en cuyo caso me llega solo parte del listado... :mad:

Si pongo en el cliente:

datos:=socket.ReceiveText;
showmessage(datos);

entonces, se me abren tres ventanas a la vez con todos los datos, pero solo aparecen en el listbox los de la ultima... :confused:

En principio si esta llegando todo el texto ya que lo leo en los showmessages, pero lo manda en tres tandas, no todo de una vez...
¿Por que?
¿Demasiado texto para sendtext?
¿ Hace falta otra instruccion en plan sendstream o sendbuf?
¿alguna solucion?
Gracias y un saludo.
Juanma

JMGR 09-11-2005 21:30:11

He intentado usar el sendstream pero no me aclaro... :(
¿Alguna idea o sugerencia...?

[Gunman] 14-11-2005 20:33:02

Cita:

Empezado por JMGR
En principio si esta llegando todo el texto ya que lo leo en los showmessages, pero lo manda en tres tandas, no todo de una vez...
¿Por que?

Los sockets envian los mensajes divididos en distintos paquetes.

Cita:

Empezado por JMGR
¿Demasiado texto para sendtext?
¿ Hace falta otra instruccion en plan sendstream o sendbuf?

No creo que ese sea el problema.

Cita:

Empezado por JMGR
¿alguna solucion?

Mira los ejemplos que lleva delphi, pueden ser de gran ayuda. Puedes ver ejemplos de chats si lo único que te interesa es enviar text.

JMGR 14-11-2005 20:50:48

Buenas....
Gracias por la respuesta, he estado mirando el ejemplo que trae Delphi del Chat y usa sendtext, pero claro para mandar una sola linea...a mi el problema me surge cuando quiero mandar un listado grande, es decir, muchas lineas...
que lo que es llegar, si que llegan, lo que pasa es que al mandarlo en tres paquetes el listbox se va actualizando con el contenido de cada paquete segun llega, pero sustitutyendo, no añadiendo, con lo cual lo que me aparece finalmente en el listbox es el listado correspondiente al ultimo paquete...En otras palabras, si los 3 paquetes contienen los nombres de las carpetas de la A->J, K->Q y R->Z, respectivamente, solo me aparecen las carpetas de la R a la Z, pero las anteriores no... :mad:

Si no encuentro una solucion rapido me decidire por ftp pero me quedo con la intriga de por qué pasa esto...
Muchas gracias y un saludo!
Juanma

[Gunman] 14-11-2005 21:02:30

La verdad es que no pasa nada extraño, sólo que no estás usando los eventos adequados, qué componente de sockets usas?

Prueba de usar el Indy TCP Client (si no lo estás usando).

También puedes hacer lo siguiente:
En el botón que ejecuta la acción (me imagino que será un botón) le metes ListBox.Clear;
En el evento onreceive le dices que te meta lo recibido en el listbox, pero sin eliminar lo que contiene.

He visto que para asignar el texto del list box usas ListBox.Items.Text, esto te substituye el texto por otro, es como la propiedad Text de un Edit. Prueba con poner ListBox.Items.Text := ListBox.Items.Text+socket.SendText(recibido); donde recibido es una variable de tipo string. Me entiendes?

[Gunman] 14-11-2005 21:12:36

te lo escribo bien:
Evento onreceive:
Código Delphi [-]
  var
    Received: String;
  begin
    Socket.SendText(Received);
    ListBox.Items.Text := ListBox.Items.Text+Received;
  end;

JMGR 14-11-2005 21:32:58

Estoy usando los sockets que vienen en la paleta Internet, TClientSocket y TServerSocket

Otra cosa, ya habia probado a hacer lo que me sugieres pero me sigue pasando lo mismo... :confused:

Pongo aqui el codigo del cliente a ver si es que se me esta pasando algo...
Código Delphi [-]
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
 datos:widestring;
begin
 lbres.clear;
 datos:=socket.ReceiveText;
// showmessage(datos);
 lbres.Items.text:=lbres.Items.text+datos;
end;

Y aqui el del servidor...
Código Delphi [-]
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
 i,j:integer;
 dir, orden, ruta, nom, ext:string;
begin
 orden:=socket.ReceiveText;
 memo1.lines.add(orden);
 if pos('lista',orden)=1 then
  begin
    ruta:=copy(orden,pos('!',orden)+1,(pos('¡',orden)-1)-pos('!',orden));
    nom:=copy(orden,pos('¡',orden)+1,(pos('.',orden)-1)-pos('¡',orden));
    ext:=copy(orden,pos('.',orden)+1,3);
    if nom='' then nom:='*';
    if ext='' then ext:='*';
    FindFile1.Path:=ruta;
    FindFile1.FileMask:=nom+'.'+ext;
    Lbres.items:=FindFile1.SearchForFiles;
    socket.SendText(lbres.Items.text);
  end

Findfile es un componente para buscar ficheros y los devuelve en una Stringlist...¿Tendrá algo que ver...?

Voy a intentarlo con el Indy TCPClient, que nunca he usado y por lo leido aqui deben ser mejores...

JMGR 14-11-2005 21:47:27

A ver, creo que ya estoy cerca...
Resulta que si hago exactamente lo mismo pero con un memo en vez de un listbox funciona perfectamente... :confused:
Es decir, si pongo:
Código Delphi [-]
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
 datos:widestring;
begin
 lbres.clear;
 datos:=socket.ReceiveText;
// showmessage(datos);
 memo1.text:=memo1.text+datos;
 lbres.Items.text:=lbres.Items.text+datos;
end;

entonces, en el listbox me sigue pasando lo mismo, pero en el memo si que me aparece el listado completo... :confused: :confused: :confused:
lo único que se me ocurre es que el evento OnRead del socket cliente se dispara cada vez que llega un paquete, o sea, 3 veces en este caso, con una sola instrucción sendtext en el server, con lo que hace el clear del listbox, y por eso solo se me ve el ultimo listado...

[Gunman] 14-11-2005 23:03:35

quita el lbres.clear.

JMGR 15-11-2005 20:13:42

Por fin!!!!!! :D :D :D

Al final me estaba liando yo solo....

Muchas gracias gunman no te imaginas el peso que me quitas de encima...

Ahora voy a ver cómo mandar un archivo del listado...ya dare el coñazo por aqui si tengo problemas....

1 saludo!
Juanma


La franja horaria es GMT +2. Ahora son las 18:42:51.

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