Cómo implementar la transferencia de archivos ftp en lenguaje c en Unix
nt FtpInit(char* Host,char* Cuenta,char* Contraseña)
{
short shPortNumber;
long lAddr;
char RecvBuf[1024];
char SendBuf[1024];
int RecvLen,SendLen;
shPortNumber=htons(21 );
lAddr=inet_addr(Host);
memset(HostName,0,16);
memcpy(HostName,Host,strlen(Host)) ;
hClient=socket(AF_INET,SOCK_STREAM,0);
if (hClient<0)
{
return -1 ;
}
if(setsockopt(hClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&rcvtime,sizeof(int)))
{
close(hClient);
return -1;
}
if(setsockopt(hClient,SOL_SOCKET,SO_KEEPALIVE,(char *)&keepalive, sizeof(int)))
{
close(hClient);
return -1;
}
SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.s_addr = lAddr;
SockAddr.sin_port = shPortNumber;
if (connect(hClient,( const struct sockaddr *)&SockAddr,sizeof(SockAddr))<0)
{
close(hClient);
return -1;
}
memset(RecvBuf,0,1024);
if((RecvLen=FtpMatchReceive(hClient,RecvBuf, "220",1024))<=0)
{
cerrar(hClient);
devolver -1;
}
if(SendLen=GetFtpSendBuf ("USUARIO",Cuenta,SendBuf,1024)<=0)
{
close(hClient);
return -1 ;
}
if(EnviarFTPCommand(hClie
nt,SendBuf)!=331)
{
close(hClient);
return -1;
}
if(SendLen=GetFtpSendBuf("PASS",Passwd,SendBuf,1024)<=0)
{
close(hClient);
return -1 ;
}
if(SendFTPCommand(hClient,SendBuf)!=230)
{
close(hClient );
return -1;
}
}
int FtpGetFile(char * FileName)
{
int hListenSocket;
int hDataSocket;
int RetWriteFile;
int ReturnCode;
char RemoteFileName [256];
char RemoteFile[256];
char ExecCommand[256];
char * pcSubDir;
memset( RemoteFileName,0,256);
memset(RemoteFile,0,256);
memset(ExecCommand,0,256);
strcpy(RemoteFileName,FileName);
memcpy(ExecCommand,"CWD ",4);
pcSubDir=strrchr(RemoteFileName,'\\');
if (pcSubDir !=NULL) p>
{
strncat(ExecCommand,RemoteFileName,RemoteFileName-pcSubDir);
if(SendFTPCommand(hClient,ExecCommand)!=250)
{
close(hClient);
return -1;
}
strcpy(RemoteFile,pcSubDir);
}
else
{
strcpy(RemoteFile,RemoteFileName);
}
si ((hListenSocket=CreatListenSocket(hClient))<0)
{
close(hClient);
return -1;
}
if(RequestDataConnect
ion(hClient,hListenSocket)<0)
{
close(hClient);
return -1;
} p>
memset( ExecCommand,0,256);
memcpy( ExecCommand, "RETR ",5);
strcat( ExecCommand,RemoteFile);
printf("El nombre del archivo=%s\n",RemoteFile);
strcat(ExecCommand,"\r\n");
ReturnCode=SendFTPCommand(hClient,ExecCommand)
if(ReturnCode!=150)
{
close(hClient);
return -1;
}
if((hDataSocket=AcceptDataConnection(hListenSocket))<0)
{
close(hClient);
devolver -1;
}
if((RetWriteFile=WriteFile(hDataSocket,RemoteFile))<0)
{
cerrar(hDataSocket);
cerrar(hClient);
devolver -1;
}
}