验证中...
客户端
Raw Copy
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<pthread.h>
#include"network.h"
#include<stdbool.h>
#include<sys/stat.h>
#include<fcntl.h>
int ftp_name(char* name,Network* nw);
//输入密码
int ftp_password(Network* nw);
//上传文件
int put_file(Network* nw);
//登陆
int login_(Network* nw);
//下载文件
int download_file(Network* nw);
//列出所有文件
int list(Network* nw);
int main()
{
Network* nw = open_network('c',SOCK_STREAM,"172.20.10.2",21);
if(NULL == nw)
{
printf("open network socket null!\n");
return -1;
}
char buf[1024] = {""};
nrecv(nw,buf,sizeof(buf));
puts(buf);
login_(nw);
printf("登陆成功,请输入您需要的指令\n");
for(;;)
{
bzero(buf,sizeof(buf));
printf(">");
scanf("%s",buf);
if(0 == strcmp(buf,"list"))
{
list(nw);
}
if(0 == strcmp(buf,"down"))
{
download_file(nw);
}
if(0 == strcmp(buf,"put"))
{
put_file(nw);
}
}
}
//登陆
int login_(Network* nw)
{
char buf[1024] = {};
while(!strstr(buf,"230"))
{
bzero(buf,sizeof(buf));
char name[1024] = {};
printf("请输入您的姓名:");
scanf("%s",name);
sprintf(buf,"USER %s\n",name);
puts(buf);
nsend(nw,buf,strlen(buf));
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
bzero(buf,sizeof(buf));
clear_stdin();
char buf1[1024] = {};
printf("请输入您的密码:");
get_passwd(buf,true,10);
sprintf(buf1,"PASS %s\n",buf);
printf("\n%s",buf1);
nsend(nw,buf1,strlen(buf1));
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
}
}
//列出所有文件
int list(Network* nw)
{
char buf[2048] = {};
sprintf(buf,"PASV\n");
nsend(nw,buf,strlen(buf));
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
unsigned char ip1,ip2,ip3,ip4,port1,port2;
sscanf(strchr(buf,'(')+1,"%hhu,%hhu,%hhu,%hhu,%hhu,%hhu",&ip1,&ip2,&ip3,&ip4,&port1,&port2);
sprintf(buf,"%hhu.%hhu.%hhu.%hhu",ip1,ip2,ip3,ip4);
Network* data_nw = open_network('c',SOCK_STREAM,buf,port1*256+port2);
printf("connect success fd = %d\n",data_nw->fd);
sprintf(buf,"LIST -al\n");
nsend(nw,buf,strlen(buf));
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
int ret = 0;
bzero(buf,sizeof(buf));
while(ret = nrecv(data_nw,buf,sizeof(buf)))
{
printf("%s",buf);
bzero(buf,sizeof(buf));
}
close_network(data_nw);
printf("\n");
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
}
//下载文件
int download_file(Network* nw)
{
char buf[2048] = {};
char buf1[2048] = {};
sprintf(buf,"TYPE I\n");
nsend(nw,buf,strlen(buf));
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
bzero(buf,sizeof(buf));
printf("请输入要下载的文件名\n");
scanf("%s",buf1);
sprintf(buf,"SIZE %s\n",buf1);
nsend(nw,buf,strlen(buf));
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
sprintf(buf,"MDTM %s\n",buf1);
nsend(nw,buf,strlen(buf));
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
bzero(buf,sizeof(buf));
sprintf(buf,"PASV\n");
nsend(nw,buf,strlen(buf));
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
unsigned int ip1,ip2,ip3,ip4,port1,port2;
sscanf(strchr(buf,'(')+1,"%u,%u,%u,%u,%u,%u",&ip1,&ip2,&ip3,&ip4,&port1,&port2);
sprintf(buf,"%u.%u.%u.%u",ip1,ip2,ip3,ip4);
Network* data_nw = open_network('c',SOCK_STREAM,buf,port1*256+port2);
printf("connect success fd = %d\n",data_nw->fd);
bzero(buf,sizeof(buf));
sprintf(buf,"RETR %s\n",buf1);
nsend(nw,buf,strlen(buf));
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
int fd = open(buf1,O_WRONLY|O_CREAT|O_TRUNC,0644);
if(0 > fd)
{
perror("open");
return -1;
}
int ret;
while(ret = nrecv(data_nw,buf,sizeof(buf)))
{
write(fd,buf,ret);
}
close(fd);
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
}
//上传文件
int put_file(Network* nw)
{
char buf[2048] = {};
char buf1[2048] = {};
sprintf(buf,"TYPE I\n");
nsend(nw,buf,strlen(buf));
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
bzero(buf,sizeof(buf));
printf("请输入要上传的文件名\n");
scanf("%s",buf1);
sprintf(buf,"SIZE %s\n",buf1);
nsend(nw,buf,strlen(buf));
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
bzero(buf,sizeof(buf));
sprintf(buf,"PASV\n");
nsend(nw,buf,strlen(buf));
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
unsigned int ip1,ip2,ip3,ip4,port1,port2;
sscanf(strchr(buf,'(')+1,"%u,%u,%u,%u,%u,%u",&ip1,&ip2,&ip3,&ip4,&port1,&port2);
sprintf(buf,"%u.%u.%u.%u",ip1,ip2,ip3,ip4);
Network* data_nw = open_network('c',SOCK_STREAM,buf,port1*256+port2);
printf("connect success fd = %d\n",data_nw->fd);
int fd = open(buf1, O_RDWR);
if(0 > fd)
{
perror("open");
return -1;
}
int ret;
while(ret = read(fd,buf,sizeof(buf)))
{
nsend(data_nw,buf,ret);
}
close(fd);
bzero(buf,sizeof(buf));
sprintf(buf,"STOR %s\n",buf1);
nsend(nw,buf,strlen(buf));
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
bzero(buf,sizeof(buf));
nrecv(nw,buf,sizeof(buf));
puts(buf);
}

Comment list( 0 )

You need to Sign in for post a comment

Help Search