c语言ftp上传文件
写一个脚本,执行上传文件的功能,在C 中调用,通过返回值判断是否成功
㈡ 在linux中如何用C语言实现FTP上传
ftp协议还是比较麻烦的,FTP上传一般用script实现,几行就行。若用C写,起码4,5百行。
㈢ unix下用c语言实现一个基于ftp的文件传输的client
貌似 Linux 下可以直接使用 ftp 命令
Red Hat 9.0自带VSFTP,你配置好后,别人可
以直接通过终端上传下载文件,至于怎么用C
语言实现,不好意思,哥们儿不会。
用C的system函数调用 ftp 命令
unix下面也有ftp啊
int ftpcmd(int sockftp,char *fmt,...) //cmd
{
va_list vp;
int err,len;
int i,j,n,p;
if (ftpio == NULL)
{
ftpio = fdopen(sockftp,"r"); //socket->file pointer
if (ftpio == NULL)
return -1;
}
if (fmt)
{
va_start(vp,fmt);
len = vsprintf(ftp_buf,fmt,vp);
ftp_buf[len++] = '\r';
ftp_buf[len++]='\n';
write(sockftp,ftp_buf,len); //buf->socket
}
n=read(sockftp,ftp_buffer,sizeof(ftp_buffer));
printf("the buff is %s\n",ftp_buffer);
if(fmt=="PASV") //被动模式下提取需要连接服务端的端口
{
ftp_buffer[n-3]='\0';
str1=ftp_buffer+39;
str2=strchr(str1,',');
i=atoi(str2+1);
n=0;
while(str1[n]!=',')
{
str3[n]=str1[n];
n++;
}
j=atoi(str3);
p=j*256+i;
return p;
}
return 1;
}
int ftp()
{
char *host="ftp.tust.e.cn";
char *user="ejia";
char *pass="ejia2094ejia";
char *filename="net";
char *savefile="net";
int sockftp = -1,sockdata = -1,sockxfer = -1;
struct sockaddr_in addr;
unsigned long hostip;
int len,tmp,err,err1;
int retval = -1;
int savefd;
char *del=":";
char *port;
struct hostent *he;
hostip = inet_addr(host); //ip
sockftp = socket(AF_INET,SOCK_STREAM,0); //control socket
if (sockftp == -1)
goto out;
addr.sin_family = PF_INET;
addr.sin_port = htons(21);
addr.sin_addr.s_addr = hostip;
if (connect(sockftp,(struct sockaddr *)&addr,sizeof(addr)) == -1) //wait for connect
goto out;
err = ftpcmd(sockftp,NULL); //connect ftp server
err = ftpcmd(sockftp,"USER %s",user);
err = ftpcmd(sockftp,"PASS %s",pass);
err = ftpcmd(sockftp,"TYPE I");
err1 = ftpcmd(sockftp,"PASV");
tmp = sizeof(addr);
sockdata = socket(AF_INET,SOCK_STREAM,0); //data socket
if (sockdata == -1)
goto out;
memset(&addr,0,tmp);
addr.sin_family = AF_INET;
addr.sin_port = htons(err1);
addr.sin_addr.s_addr = inet_addr(host);;
sockxfer = connect(sockdata,&addr,tmp);
if (sockxfer == -1)
goto out;
err=ftpcmd(sockftp,"RETR %s",filename);
/*savefd = open(savefile,O_RDWR | O_CREAT); //create file
if (savefd == -1)
goto out; */
len=read(sockdata,ftp_buf,sizeof(ftp_buf));
client_ip=strtok(ftp_buf,del);
port=strtok(NULL,del);
client_port=atoi(port);
printf("the cilentip is %s,the port is %d\n",client_ip,client_port);
/*write(savefd,ftp_buf,len);
close(savefd);*/
out:
close(sockxfer);
close(sockdata);
close(sockftp);
}
注意一下四楼没包含库文件
<sys/un.h>
<netinet/in.h>
<sys/socket.h>
<netdb.h>
<arpa/inet.h>
当然还有<unistd.h>
介绍本书《高级UNIX编程》外文翻译的,
里面讲得很详细。
㈣ 如何用c语言实现http ftp的上传功能
hehe ..这是因为FTP跟HTTP根本不是同一种类型服务器。FTP专门是用来下载上传用的,可以算做一个网络硬盘吧..而HTTP服务器一般是WEB服务器..性质完全不一样,就好象你家里的厨房和厕所一样,功能完全不一样嘛你总不可能在厕所想做饭,在厨房想上厕所对不对,没有任何办法..你只能按最直接的地址下载
如果帮助到您,请记得采纳为满意答案哈,谢谢!祝您生活愉快! vae.la
㈤ 你好,这个你解决了吗C语言如何用FtpPutFile()函数上传文件到Ftp服务器!下载用FtpGetFile()可以!
先后使用InternetOpen和InternetConnect打开连接。使用CreateFile函数打开本地文件。使用FtpOpenFile函数打开远程文件。分别使用InternetReadFile和ReadFile函数读取
FTP
或本地文件。分别使用InternetWriteFile和WriteFile函数写入
FTP
或本地文件。使用CloseHandle函数关闭本地文件句柄。使用InternetCloseHandle函数关闭
FTP
文件句柄。
㈥ 如何在unix下,c语言中实现ftp文件传输
nt FtpInit(char* Host,char* Account,char* Passwd)
{
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)
{
close(hClient);
return -1;
}
if(SendLen=GetFtpSendBuf("USER",Account,SendBuf,1024)<=0)
{
close(hClient);
return -1 ;
}
if(SendFTPCommand(hClient,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)
{
strncat(ExecCommand,RemoteFileName,RemoteFileName-pcSubDir);
if(SendFTPCommand(hClient,ExecCommand)!=250)
{
close(hClient);
return -1;
}
strcpy(RemoteFile,pcSubDir);
}
else
{
strcpy(RemoteFile,RemoteFileName);
}
if((hListenSocket=CreatListenSocket(hClient))<0)
{
close(hClient);
return -1;
}
if(RequestDataConnection(hClient,hListenSocket)<0)
{
close(hClient);
return -1;
}
memset( ExecCommand,0,256);
memcpy( ExecCommand,"RETR ",5);
strcat( ExecCommand,RemoteFile);
printf("The FileName=%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);
return -1;
}
if((RetWriteFile=WriteFile(hDataSocket,RemoteFile))<0)
{
close(hDataSocket);
close(hClient);
return -1;
}
}
㈦ C语言如何用FtpPutFile()函数上传文件到Ftp服务器!下载用FtpGetFile()可以!
- 先后使用InternetOpen和InternetConnect打开连接。
- 使用CreateFile函数打开本地文件。
- 使用FtpOpenFile函数打开远程文件。
- 分别使用InternetReadFile和ReadFile函数读取 FTP 或本地文件。
- 分别使用InternetWriteFile和WriteFile函数写入 FTP 或本地文件。
- 使用CloseHandle函数关闭本地文件句柄。
- 使用InternetCloseHandle函数关闭 FTP 文件句柄。
㈧ 关于C语言FTP服务器上传数据实现方法
FTP服务器是现成的 ? 那你就是要写客服端咯。 看FTP协议跟socket套接字。