PDA

Ver la Versión Completa : Ver lista de archivos tipo ftp


JMGR
07-11-2005, 14:57:32
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
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.


¿Demasiado texto para sendtext?
¿ Hace falta otra instruccion en plan sendstream o sendbuf?
No creo que ese sea el problema.


¿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:

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...

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...

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:

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