⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 Linux下C实现的ftp客户端代码
💻 C
字号:
#include <stdlib.h>#include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <fcntl.h>#include <sys/time.h>#include <sys/select.h>#include <signal.h>#include "common.h"#include "ftpclient.h"#include "debug.h"#define MAX_BUF_LEN			128#define FTPC_CMD_LEN		8#define FTPC_PARAM_LEN		64#define MAX_USER_NAME		16#define MAX_USER_PASSWD	16void mem_error(int sig_no){	printf("\nThe program may have some bug,sorry,exit now!\n");	exit(-1);}void user_int(int sig_no){	printf("\nuser interrupt,exit now!\n");	exit(-1);}void show_usage(void){	printf("ftp server_ip [server_port]\n");}int set_fd_lock(int fd,int flag){	int file_flag;	file_flag = fcntl(fd,F_GETFD);	if(flag == FALSE){		fcntl(fd,F_SETFD, file_flag |O_NONBLOCK);	}	else{		fcntl(fd,F_SETFD, file_flag & ~O_NONBLOCK);	}	return 0;}int get_name_passwd(char *usr_name,char *usr_passwd){	int n_read;	if((usr_name == NULL) || (usr_passwd == NULL)){		debug_print("user's name or password is NULL in function[get_name_passwd]n");		return -1;	}	printf("please input your name:");	fflush(stdout);	n_read = read(STD_OUT,usr_name,MAX_USER_NAME);	usr_name[n_read-1] = '\0';	printf("please input your password:");	fflush(stdout);	n_read = read(STD_OUT,usr_passwd,MAX_USER_PASSWD);	usr_passwd[n_read-1] = '\0';	return 0;}int parse_cmd(char *cmd,char *param,char *buf){	char *first_space;	char *p_cpy;	if((cmd == NULL) || (buf == NULL) || (param == NULL)){		debug_print("command or parameter or buffer is NULL in function[parse_cmd]\n");		return -1;	}	first_space = strchr(buf,' ');	if(first_space == NULL){		strcpy(cmd,buf);		*param = '\0';		return 0;	}	*first_space = '\0';	strcpy(cmd,buf);	p_cpy = first_space + 1;	while(*p_cpy != '\0'){		if((*p_cpy=='\n') || (*p_cpy=='\t') || (*p_cpy==' ')){			break;		}		*param++ = *p_cpy++;	}	*param = '\0';	return 0;}int main(int argc,char **argv){	char svr_ip[16],usr_name[MAX_USER_NAME],usr_passwd[MAX_USER_PASSWD];	uint16 svr_port;	ftpc_ctrl ftp_info;	int n_read = 0;	char buf[MAX_BUF_LEN];	char cmd[FTPC_CMD_LEN];	char param[FTPC_PARAM_LEN];	char msg[1024];	signal(SIGSEGV,mem_error);	signal(SIGINT,user_int);	if(argc == 2){		strcpy(svr_ip,argv[1]);		svr_port = DEFAULT_FTP_PORT;	}	else if(argc == 3){		strcpy(svr_ip,argv[1]);			svr_port = atoi(argv[2]);		}	else{		show_usage();		return -1;	}	if(ftpc_init(&ftp_info) == -1){		return -1;	}else{		debug_print("ftpc init success\n");	}		if(ftpc_connect_svr(svr_ip,svr_port,&ftp_info) == -1){		printf("the server may be shuted , process exit\n");		return -1;	}		get_name_passwd(usr_name,usr_passwd);	if(ftpc_login_svr(usr_name,usr_passwd,&ftp_info) == -1){		printf("user name or password error!\n");		return -1;	}else{		debug_print("login to server success\n");		printf("%s",FTPC_LABEL);		fflush(stdout);		}	set_fd_lock(STD_IN,FALSE);	while(ftp_info.connected){		if(n_read > 0){			printf("%s",FTPC_LABEL);			fflush(stdout);		}		n_read = read(STD_IN,buf,MAX_BUF_LEN);		if(n_read == -1){			debug_print("function[read] error\n");			continue;		}		else if(n_read == 0){			continue;		}		else{			if(buf[0] != '\n'){				buf[n_read-1] = '\0';				if(parse_cmd(cmd,param,buf) == 0){					ftpc_deal_cmd(cmd,param,&ftp_info,msg);					printf("%s\n",msg);				}			}		}	}	ftpc_close(&ftp_info);	return 0;	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -