Hola amigos, estoy picandome un cliente ftp en C desde 0, para subir archivos a un FTP server. Llevo el siguiente código de momento, he conseguido autenticarme en el servidor ftp, pero al enviar el fichero archivo.txt, me lo crea vacío en el servidor, y no lo sube y me sale en el servidor como archivo vacio de 0bytes.
Alguien sabria decirme en que estoy fallando?
Código C:
Ver original#pragma comment(lib, "wsock32.lib")
#include <stdio.h>
#include <windows.h>
#include <Winsock.h>
WSADATA ws;
char buf[10000];
void output(char *str)
{
FILE
*fp
= fopen("output.txt", "a+");}
SOCKET ConnectFTP(char* ftpname, int port)
{
WSAStartup(0x101, &ws);
// Open up a socket for out TCP/IP session
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
// Set up socket information.
struct sockaddr_in a = {AF_INET, htons(port)};
// Get the ip address of our ftp
struct hostent *h = gethostbyname(ftpname);
a.sin_addr.s_addr = inet_addr(inet_ntoa(*((struct in_addr *)h->h_addr)));
// Actually connect to the server
connect(s, (struct sockaddr *)&a, sizeof(a));
return s;
}
void receiving(SOCKET s, char* string)
{
char aa[1000] = {'/0'};
int ii = recv(s, aa, sizeof(aa), 0);
output(buf);
if(string !=0)
}
void sending(SOCKET s, char* verb)
{
output("Sending: ");
output(buf);
}
int _stdcall WinMain(HINSTANCE i, HINSTANCE j, char* k, int l)
{
SOCKET s1 = ConnectFTP("ftp.XXXXXXXXXXXXX.com", 21);
receiving(s1,0);
printf("Enviando usuario...\n"); sending(s1, "USER XXXXXX");
receiving(s1,0);
printf("Enviando contrasena...\n"); sending(s1, "PASS XXXYYYZZZ");
receiving(s1,0);
sending(s1, "CWD web");
sending(s1, "PASV");
char szString[1000];
receiving(s1, szString);
sending(s1, "STOR archivo.txt");
sending(s1, "QUIT");
receiving(s1,0);
return 0;
}
El programa no me devuelve ningún error, a priori parece que funciona bien, aunque no sube el archivo, solo crea uno con el mismo nombre varcío
Gracias de antemano