当前位置: 技术问答>linux和unix
(高分)谁写过linux下的ftp客户端(访问linux服务器),请帮帮忙!有代码也行!
来源: 互联网 发布时间:2015-03-06
本文导语: 这个程序中同时使用了PORT 和 PASV 但是每次到APPE命令的时候,就会报告: DATA CONNOT CONNECTTION 这是为什么?顺序应该是什么?? 如果谁有现成的代码,也好!万分感激! 这时我新工作的第一个任务,555~ #include #include ...
这个程序中同时使用了PORT 和 PASV
但是每次到APPE命令的时候,就会报告: DATA CONNOT CONNECTTION
这是为什么?顺序应该是什么??
如果谁有现成的代码,也好!万分感激!
这时我新工作的第一个任务,555~
#include
#include
#include
#include
#include
#include
/* strcpy(snd, "HELPrn");*/
/* strcpy(snd, "PWDrn");*/
void logintoftp();
char name[10], pass[10];
int sockfd;
int main(int argc, char *argv[])
{
char sendln[1024], myftp[4048];
int len, i;
struct sockaddr_in cli;
struct in_addr in;
struct hostent *sn;
if(argc 0){
rcv[n] = 0;
if(strchr(rcv, 'n') != NULL)
break;
}
printf("user:rev=%sn",rcv);
//send password CMD
memset(rcv, '', 4096);
printf("Password :33[1;33m %s33[0m n", pass);
memset(snd, '', 1024);
sprintf(snd, "PASS %srn", pass);
write(sockfd, snd, strlen(snd));
while((n=read(sockfd, rcv, sizeof(rcv))) > 0){
rcv[n] = 0;
if(strchr(rcv, 'n') != NULL)
break;
}
printf("pass:rcv==%sn",rcv);
//send type CMD
memset(rcv, '', 4096);
memset(snd, '', 1024);
strcpy(snd, "TYPE Irn");
write(sockfd, snd, strlen(snd));
while((n=read(sockfd, rcv, sizeof(rcv))) > 0){
rcv[n] = 0;
if(strchr(rcv, 'n') != NULL)
break;
}
printf("type:rcv==%sn",rcv);
//port ?????
memset(rcv, '', 4096);
memset(snd, '', 1024);
strcpy(snd, "PORT 172,16,197,13,13,36rn");
write(sockfd, snd, strlen(snd));
while((n=read(sockfd, rcv, sizeof(rcv))) > 0){
rcv[n] = 0;
if(strchr(rcv, 'n') != NULL)
break;
}
printf("port:rcv==%sn",rcv);
//try append CMD
memset(rcv, '', 4096);
memset(snd, '', 1024);
strcpy(snd, "APPE aarn"); //append localFile and save as remoteFile
//(snd, "APPE %s %srn", localFile, remoteFile); //append localFile and save as remoteFile
write(sockfd, snd, strlen(snd));
//recv(sockfd, rcv, 1024 , 0);
while((n=read(sockfd, rcv, sizeof(rcv))) > 0){
rcv[n] = 0;
if(strchr(rcv, 'n') != NULL)
{
printf("append:rcv==%sn",rcv);
continue;
}
}
printf("append:rcv==%sn",rcv);
/*
memset(rcv, '', 4096);
memset(snd, '', 1024);
strcpy(snd, "PORT 192,168,1,26,10,2rn");
write(sockfd, snd, strlen(snd));
while((n=read(sockfd, rcv, sizeof(rcv))) > 0){
rcv[n] = 0;
if(strchr(rcv, 'n') != NULL)
break;
}
printf("rcv==%sn",rcv);
memset(rcv, '', 4096);
memset(snd, '', 1024);
strcpy(snd, "STOR rasrn");
write(sockfd, snd, strlen(snd));
*/
/*
while((n=read(sockfd, rcv, sizeof(rcv))) > 0){
rcv[n] = 0;
if(strchr(rcv, 'n') != NULL)
break;
}
printf("rcv==%sn",rcv);
*/
/*
while(result) {
bytes = send(sockfd,buffer,len,0);
if (bytes 0){
rcv[n] = 0;
if(strchr(rcv, 'n') != NULL)
break;
}
printf("rcv==%sn",rcv);
*/
//free(temp);
//return;
}
/* strcpy(snd, "RETR testftp.crn");*/
|
太长了 :(
你看看 www.busybox.net 上
busybox里面有一个简单的tftp客户端
它自己介绍如下:
/* ------------------------------------------------------------------------- */
/* tftp.c */
/* */
/* A simple tftp client for busybox. */
/* Tries to follow RFC1350. */
/* Only "octet" mode supported. */
/* Optional blocksize negotiation (RFC2347 + RFC2348) */
你看看 www.busybox.net 上
busybox里面有一个简单的tftp客户端
它自己介绍如下:
/* ------------------------------------------------------------------------- */
/* tftp.c */
/* */
/* A simple tftp client for busybox. */
/* Tries to follow RFC1350. */
/* Only "octet" mode supported. */
/* Optional blocksize negotiation (RFC2347 + RFC2348) */
|
cli.sin_port = htons(21);
好像FTP的通信端口应该是20(我是指数据),21只是个连接端口。
FTP跟其他服务有点不一样,以前做过,也遇到同样的问题,好像就是这么解决的。
好像FTP的通信端口应该是20(我是指数据),21只是个连接端口。
FTP跟其他服务有点不一样,以前做过,也遇到同样的问题,好像就是这么解决的。