SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Escalona en Viernes 28 de Julio de 2006, 13:50

Título: Cliente Ftp.
Publicado por: Escalona en Viernes 28 de Julio de 2006, 13:50
Bueno eso, ando buscando alguna librería para hacer un cliente FTP en C, la idea es subiry bajar archivos de un servidor FTP, tampoco es gran cosa, supongo ke habrá bastante, ¿Que me recomendais? :comp:
Título: Re: Cliente Ftp.
Publicado por: JuanK en Viernes 28 de Julio de 2006, 14:29
en windows... la api de windows
en linux tambien la api.
Título: Re: Cliente Ftp.
Publicado por: x.cyclop en Viernes 28 de Julio de 2006, 20:02
Checa el código del FileZilla o del Gftp. :P
Título: Re: Cliente Ftp.
Publicado por: su - en Sábado 29 de Julio de 2006, 03:20
Forma dificil: Socket.
Forma facil: curl (http://curl.haxx.se/)
Título: Re: Cliente Ftp.
Publicado por: JuanK en Sábado 29 de Julio de 2006, 04:43
Benisima , no la conocia!!!! :devil:

para tenerla e cuenta.  :smartass:
Título: Re: Cliente Ftp.
Publicado por: Eternal Idol en Sábado 29 de Julio de 2006, 08:12
Como para casi cualquier proyecto de redes se usan sockets (en Windows existe Winsock) y se debe aprender el protocolo que se quiera usar en este caso FTP, busca el RFC correspondiente.
Título: Re: Cliente Ftp.
Publicado por: Escalona en Lunes 31 de Julio de 2006, 09:35
Buenas! Gracias por las respuestas. Me parece interesante la librería cURL, pero no encuentro mucha documentacion, de momento estoy intentando instalarla para usarla con DevCpp, y estoy buscando algun ejemplo para ver como funciona. ¿Sabríais decirme algun lugar donde encontrarlo?.
Bueno si no me va bien con ésta librería, me decantaré por los sockets, que ya lo he hecho antes, pero desde Visual Basic, con el control Winsock.
Título: Re: Cliente Ftp.
Publicado por: Escalona en Lunes 31 de Julio de 2006, 12:45
Buenas ya estoy empezando con los sockets, y me e encontrado con mi primer problema, jjajaja. Bueno el caso es que más o menos voy conociendo la estructura que tienen, creo el socket, le doy la direccion a la que quiero conectarme, pero, me falla la conexion. El codigo es éste:

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <winsock.h>
  4.  
  5. #define PORT 23           // Port it Connect on
  6. #define DATASIZE 100
  7.  
  8. int main(int argc, char *argv[])
  9. {
  10. WSADATA wsaData;
  11. WSAStartup(MAKEWORD(1, 1), &wsaData);
  12.  
  13. int sock, numbytes;
  14. char buf[DATASIZE];
  15. struct hostent *h;
  16. struct sockaddr_in their_addr;
  17.  
  18. // cambiando el argv[1] especifico donde kiero conectar.
  19. if ((h=gethostbyname(argv[1])) == NULL) {
  20. perror("gethostbyname");
  21. exit(1);
  22. }
  23. system("PAUSE");
  24.  
  25. if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
  26. perror("socket");
  27. exit(1);
  28. }
  29. system("PAUSE");
  30.  
  31. their_addr.sin_family = AF_INET;
  32. their_addr.sin_port = htons(PORT);
  33. their_addr.sin_addr = *((struct in_addr *)h->h_addr);
  34. //their_addr.sin_addr = "66.102.9.99";
  35.  
  36. if (connect(sock, (struct sockaddr *)&their_addr,sizeof(struct sockaddr)) == -1) {
  37. perror("connect");
  38. system("PAUSE");
  39. exit(1);
  40. }
  41. system("PAUSE");
  42.  
  43.  
  44. if ((numbytes=recv(sock, buf, DATASIZE-1, 0)) == -1) {
  45. perror("recv");
  46. exit(1);
  47. }
  48. system("PAUSE");
  49.  
  50. buf[numbytes] = '0';
  51. printf("Data Received: %s", buf);
  52.  
  53. system("PAUSE");
  54.  
  55. closesocket(sock);
  56. return 0;
  57. }
  58.  
  59.  
Título: Re: Cliente Ftp.
Publicado por: elvueno en Lunes 31 de Julio de 2006, 12:57
Escalona ese código no es más bien para linux? Yo he empezado con los sockets y he hecho algún source para linux y si es muy parecido que el tuyo, solo cambia #include <winsock.h> y el WSADATA wsaData, lo demás es exactamente igual en linux, ¿seguro que se hace así en windows?

Otra cosa, respecto a lo del ftp, habria que saber programar sockets a nivel de raw sockets o nivel del protocolo IP? o simplemente sabiendo manejar SOCK_STREAM se puede hacer un cliente ftp? La verdad es que no me he planteado como lo podria hacer...
Título: Re: Cliente Ftp.
Publicado por: su - en Lunes 31 de Julio de 2006, 22:25
Cita de: "Escalona"
Buenas! Gracias por las respuestas. Me parece interesante la librería cURL, pero no encuentro mucha documentacion, de momento estoy intentando instalarla para usarla con DevCpp, y estoy buscando algun ejemplo para ver como funciona. ¿Sabríais decirme algun lugar donde encontrarlo?.
Bueno si no me va bien con ésta librería, me decantaré por los sockets, que ya lo he hecho antes, pero desde Visual Basic, con el control Winsock.
http://curlftpfs.sourceforge.net/ (http://curlftpfs.sourceforge.net/)
http://efstech.dk/ (http://efstech.dk/)
http://curl.haxx.se/docs/programs.html (http://curl.haxx.se/docs/programs.html)
Título: Re: Cliente Ftp.
Publicado por: Escalona en Martes 1 de Agosto de 2006, 09:47
No hay manera de instalar el cURL, parecere un poco torpe, o más ke parecerlo lo seré. El caso es que desarrollo en Windows XP con el DevCpp. Sigo los pasos, paso a paso, que me indica el archivo de instalacion para el DevCpp ("install.Devcpp"), que viene en la web, y no hay manera de que la libreria se instale bien, me da cantidad de errores.
Tambien instalo OpenSSL, y zlib por el tema de las dependencias.La verdad que ya estoy un poco desesperado, si podeis ayudarme lo agradezco. :(
Título: Re: Cliente Ftp.
Publicado por: Geo en Martes 1 de Agosto de 2006, 16:42
¿Por qué no pruebas con el paquete ya preparado para Win32/XP en lugar de tratar de compilar?

Saludos,
JJ (Geo).
Título: Re: Cliente Ftp.
Publicado por: su - en Martes 1 de Agosto de 2006, 22:38
Cita de: "Geo"
¿Por qué no pruebas con el paquete ya preparado para Win32/XP en lugar de tratar de compilar?

Saludos,
JJ (Geo).
Es muy buena idea.
En cuanto a lo otro, pues no se, no uso Windows.
Título: Re: Cliente Ftp.
Publicado por: Escalona en Miércoles 2 de Agosto de 2006, 11:03
Bueno ya estoy trabajando con cURL, me bajé la version compilada para windows y tachán funciona perfectamente. ¿Como fue ke no se me ocurrió antes? jajaja Bueno muchas gracias por vuestra ayuda!, permanezco por aqui por si puedo ayudar a alguien, hasta la proxima.