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

📄 ftpclient.c

📁 简单 ftp 服务器及客户端
💻 C
字号:
/* * ftpclent.c   * Copyright (C) 2008  * Authors: Sun Sanna  * Create Time: 2008/10/23 * last Modified: 2008/10/23 * * Revision 1.1 2008/10/24 * +Add socket part * * Revision 1.2 2008/10/25 * +Add file asscoiate */#include"wrap.h"int ifip(char *ip){	int i = 0, j = 0;	while(*ip != '\0') {		if(*ip >= '0' && *ip <= '9') {			i++;			if(i > 3)				return 1;		}		else if(*ip == '.') {			j++;			if(i <= 3 && j <= 3)				i = 0;			else 				return 1;		}		else return 1;		ip++;	}	return 0;}int split_ip(char *ip, char *path, char *buff){	char *p = buff;		if(p == NULL)		return 1;	while(*buff != '\0') {		if(*buff == ':') {			*buff = '\0';			buff++;			strcpy(ip, p);			strcpy(path, buff);			return 0;		}		buff++;	}	return 1;}int split_fname(char *fname, char *buff){	char *p = buff;		if(p == NULL)		return 1;	while(*buff != '\0') {		if(*buff == '/')			p = buff + 1;		buff++;	}	strcpy(fname, p);	return 0;}int  add_(char * opath){	char *p;	while(*opath != '\0') {		p = opath;		opath++;	}	if(p == NULL)		return 1; 	if(*p != '/') {		p++;		*p = '/';		p++;		*p = '\0';	}	return 0;}	int main(int argc, char * argv[]){   	char ip[16], spath[1024], opath[1024], file_name[256]; 	char buf[MAXLINE], cfile_type[4], flag[5];	int fd, sockfd, ifile_type = 0, n = 0, f = 4;	struct sockaddr_in servaddr;	if(argc != 3) {		printf("Command  error!\n");		exit(1);	}	if(strchr(argv[1], ':')) {		strcpy(flag, "load");f = 0;		split_ip(ip, spath, argv[1]);		strcpy(opath,argv[2]);	} else if(strchr(argv[2], ':')) {		strcpy(flag, "sent");f = 1;		split_ip(ip, opath, argv[2]);		strcpy(spath, argv[1]);	}	if(f != 0 && f != 1) {		printf("Address   error!\n");		exit(1);	}	if(ifip(ip)) {		printf("IP error!\n");		exit(1);	}	split_fname(file_name, spath);	add_(opath);		sockfd = Socket(AF_INET, SOCK_STREAM, 0);	bzero(&servaddr, sizeof(servaddr));	servaddr.sin_family = AF_INET;	inet_pton(AF_INET, ip, &servaddr.sin_addr);	servaddr.sin_port = htons(SERV_PORT);	Connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));	if(f == 0) {									/* load */		strcpy(buf, flag);		strcat(buf, spath);		Write(sockfd, buf, strlen(buf));		n = Read(sockfd, buf, MAXLINE);		buf[n] =  '\0';		if(iftype(buf, &ifile_type)) {			printf("client load, server put message:%s\n", buf);			Close(sockfd);			exit(1);		}		strcat(opath, file_name);		fd = open(opath, O_WRONLY | O_CREAT | O_TRUNC, ifile_type);		if(fd < 0) {											printf("client load, fail to creat file\n");			Close(sockfd);			exit(1);		} 		else			Write(sockfd, "ready", 6);		while(1) {			n = Read(sockfd, buf, MAXLINE);			if(n <= 0) {				close(fd);				Close(sockfd);				exit(0);			}			else 				write(fd, buf, n);		}	}	else if(f == 1)	{						/* sent */								fd = open(spath, O_RDONLY);		if(fd < 0) {			printf("client sent: fail to open file\n");			Close(sockfd);			exit(1);		}				cftype(spath, cfile_type);		strcpy(buf, flag);		strcat(buf, cfile_type);		strcat(buf, opath);		strcat(buf, file_name);		Write(sockfd, buf, strlen(buf));			n = Read(sockfd, buf, MAXLINE);		buf[n] = '\0';		if(strcmp(buf, "ready")){			printf("client sent server put message:%s\n", buf);			Close(sockfd);			close(fd);			exit(0);		}		while(1) {			n = read(fd, buf, MAXLINE);			if(n < 0) {				close(fd);				Close(sockfd);				exit(1);			}			if(n == 0) {				close(fd);				Close(sockfd);				exit(0);  			}			Write(sockfd, buf, n);		}			}}

⌨️ 快捷键说明

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