首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

!高分求取FTP客户端源程序(基于SOCKET),该怎么处理

2012-03-09 
!高分求取FTP客户端源程序(基于SOCKET)高分求取FTP客户端源程序(基于SOCKET,C语言实现),哪位大侠做过啊,能

!高分求取FTP客户端源程序(基于SOCKET)
高分求取FTP客户端源程序(基于SOCKET,C语言实现),哪位大侠做过啊,能不能发一份给我啊,马上给分!
luyufan221@163.com

[解决办法]
filezilla
http://filezilla.sourceforge.net/
[解决办法]
busybox里面有一个简单的~~
[解决办法]
客户端:【http://www.cnblogs.com/maxwolf/archive/2006/05/31/414227.html】
/**
* client.c
* @author songbo
* @abstract 客户端
* @compile gcc client.c -o client
*/

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <netdb.h>
#include <sys/stat.h>
#include <sys/errno.h>
#include <fcntl.h>
#define MAXBUFF 1024
str_echo(char * buff);
int iscdcmd(char * buff);//cd命令
int isgetcmd(char * k); //get命令
int isputcmd(char * k);//put命令
char * getPath(char *buff);//得到路径
char* getFile(char* cmd);//得到上传文件的名称
int checkcmd(char* cmd);//监测是否是合法命令
str_echo(char * buff)
{

char * s=buff;
if((strcmp(buff, "ls\n ")==0)||(strcmp(buff, "pwd\n ")==0))
{
FILE * res=popen(buff, "r ");
while(fgets(buff,MAXBUFF-1,res)!=NULL)
{
printf( "%s ",buff);
}
pclose(res);
}
else
printf( "An invalid FTP command\n ");
}

int iscdcmd(char * k)
{
char * s=k;
while(*s== ' ')
{
s=s+1;
}
if(*s!= 'c ')return 0;
s=s+1;
if(*s!= 'd ')return 0;
s=s+1;
if(*s!= ' ')return 0;
else return 1;
}
int isgetcmd(char * k)
{
char * s=k;
while(*s== ' ')
{
s=s+1;
}
if(*s!= 'g ')return 0;
s=s+1;
if(*s!= 'e ')return 0;
s=s+1;
if(*s!= 't ')return 0;
s=s+1;
if(*s!= ' ')return 0;
else return 1;
}
int isputcmd(char * k)
{
char * s=k;
while(*s== ' ')
{
s=s+1;
}
if(*s!= 'p ')return 0;
s=s+1;
if(*s!= 'u ')return 0;
s=s+1;
if(*s!= 't ')return 0;
s=s+1;
if(*s!= ' ')return 0;
else return 1;
}
int checkcmd(char* cmd)
{
if(*cmd== 'c '&&*(cmd+1)== 'd ')return 1;
else
if(*cmd== 'l '&&*(cmd+1)== 's ')return 1;
else
if(*cmd== 'p '&&*(cmd+1)== 'w '&&*(cmd+2)== 'd ')return 1;
else
if(*cmd== 'g '&&*(cmd+1)== 'e '&&*(cmd+2)== 't ')return 1;
else
if(*cmd== 'p '&&*(cmd+1)== 'u '&&*(cmd+2)== 't ')return 1;
else
if(*cmd== 'q '&&*(cmd+1)== 'u '&&*(cmd+2)== 'i '&&*(cmd+3)== 't ')return 1;
else
return 0;

}
char* getPath(char* cmd)
{
char* Path;
while(*cmd== ' ')
{
cmd=cmd+1;
}
if(*cmd== 'c '&&*(cmd+1)== 'd ')
{
cmd=cmd+2;
while(*cmd== ' ')
{
cmd=cmd+1;
}
Path=cmd;
while(*cmd!= '\n ')
{
cmd=cmd+1;
}
*cmd= '\0 ';
}
return Path;


}
char* getFile(char* cmd)
{
char* Path;
while(*cmd== ' ')
{
cmd=cmd+1;
}
cmd=cmd+3;
while(*cmd== ' ')
{
cmd=cmd+1;
}
Path=cmd;
while(*cmd!= '\n ')
{
cmd=cmd+1;
}
*cmd= '\0 ';

return Path;
}

main(argc,argv)
int argc;
char* argv[];
{
char buff[MAXBUFF];
char buff1[MAXBUFF];
char num[MAXBUFF];
char file[30];
struct sockaddr_in remote;
int sk,result,n,source,target,k;
struct hostent *hp, *gethostbyname();
sk=socket(AF_INET,SOCK_STREAM,0);
remote.sin_family=AF_INET;
hp=(struct hostent *)gethostbyname(argv[1]);
bcopy(hp-> h_addr,(char*)&remote.sin_addr,hp-> h_length);
remote.sin_port=atoi(argv[2]);
connect(sk,(struct sockaddr*)&remote,sizeof(remote));
if(read(sk,buff,MAXBUFF)> 0)
{
printf( "You are Client %s!\n ",buff);
strcpy(num,buff);
printf( "The server host name:%s\n ",inet_ntoa(remote.sin_addr));

}
while(1)
{
printf( "ftp> : ");
fgets(buff,MAXBUFF,stdin);
if(*buff== '! ')
{
char *k=buff;
k++;
if(iscdcmd(k))
{
result=chdir((char*)getPath(k));
if(result==0)
{
FILE* fp=popen( "pwd ", "r ");
if((fgets(buff,MAXBUFF,fp))!=NULL)
{
printf( "The client directory is : %s\n ",buff);

}
pclose(fp);
}
else
{
strcpy(buff,(char *)strerror(errno));
printf(buff);
printf( "\n ");
}
}
else
{
str_echo(k);
}
}
else
{
if(checkcmd(buff))
{
if(write(sk,buff,MAXBUFF) <0)
{
printf( "Clent: Fail to pass the command !\n ");
}

if(isputcmd(buff)) //上传文件
{

strcpy(file,getFile(buff));

if((source=open(file,O_RDONLY)) <0)
{
printf( "filename: no such file.\n ");
write(sk, "error\n ",MAXBUFF);
}
else
{
write(sk, "ok\n ",MAXBUFF);
printf( "uploading..\n ");
lseek(source,0,SEEK_SET);
memset(buff, 0x0 ,MAXBUFF);
while((k=read(source,buff,MAXBUFF))> 0)
{
write(sk,buff,k);
}
printf( "finished\n ");
}
close(source);


}
else
if(isgetcmd(buff)) //下载文件
{

read(sk,buff1,MAXBUFF);
if(strcmp(buff1, "error\n ")!=0)
{
printf( "downloading..\n ");
strcpy(file,getFile(buff));
printf(file);
if((target=open(file,O_WRONLY|O_CREAT|O_TRUNC,0644)) <0)
{
printf( "error\n ");
}
while(1)
{
if((k=read(sk,buff,MAXBUFF))> 0)


{
write(target,buff,k);
if(k!=MAXBUFF)break;
}
}
close(target);
printf( "finished\n ");

}
else printf( "filename: no such file.\n ");

}
else
{
if(strcmp(buff, "quit\n ")==0)//退出
{
break;
}
else
while(1) //读取服务器的返回字符
{
if((n=read(sk,buff,MAXBUFF))> 0)
{
if(strcmp(buff, "end ")==0)break;
printf( "%s ",buff);
}
}
}
}
else
printf( "An invalid FTP command\n ");
}
}
close(sk);
}
[解决办法]
http://www.programsalon.com/sourcecode/internet/ftp/client/download47.html
[解决办法]
VC下的:
http://www.cnpaf.net/Class/FTP/0532918532693737.html

热点排行