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

📄 ftpserver.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"#define FOF   "faile to open file"int split(const char *buf, char *flag, char *file_type, char *path, int *f){	strncpy(flag, buf, 4);	flag[4] = '\0';		buf += 4;	if(!strcmp(flag, "load")) {		*f = 0;		strcpy(path, buf);		return 0;	} else if(!strcmp(flag, "sent")) {		*f = 1;		strncpy(file_type, buf, 3);		file_type[3] = '\0';		buf += 3;		strcpy(path, buf);		return 0;	}	return 1;}int main(void){	struct sockaddr_in servaddr, cliaddr;	socklen_t cliaddr_len;	int listenfd, connfd, fd;	char buf[MAXLINE], flag[5], cfile_type[4], path[1024];	int ifile_type = 0, n = 0, f = 4;	listenfd = Socket(AF_INET, SOCK_STREAM, 0);	bzero(&servaddr, sizeof(servaddr));	servaddr.sin_family = AF_INET;	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);	servaddr.sin_port = htons(SERV_PORT);		Bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));	Listen(listenfd, 20);loop:		 while(1) {		cliaddr_len = sizeof(cliaddr);		connfd = Accept(listenfd, (struct sockaddr *)&cliaddr, &cliaddr_len);		n = Read(connfd, buf, MAXLINE);		if(n <= 0) {			Close(connfd);			goto loop;		}		buf[n] = '\0';		split(buf, flag, cfile_type, path, &f);		if(f == 0) {			fd = open(path, O_RDONLY);			if(fd < 0) {				printf(FOF);				Write(connfd, FOF, strlen(FOF));				Close(connfd);				goto loop;			}			cftype(path, cfile_type);			Write(connfd, cfile_type, strlen(cfile_type));						n = Read(connfd, buf, MAXLINE);			buf[n] = '\0';			if(strcmp(buf, "ready")) {				Close(connfd);				printf("client fail to creat file\n");				goto loop;			}			while(1) {				n = read(fd, buf, MAXLINE);				if(n <= 0) {					Close(connfd);					close(fd);					goto loop;				}				Write(connfd, buf, n);			}		} 		else if(f == 1) {			iftype(cfile_type, &ifile_type);			fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, ifile_type);			if(fd < 0) {				Write(connfd, FOF, strlen(FOF));				Close(connfd);				goto loop;			}			Write(connfd, "ready", 6);			while(1) {				n = Read(connfd, buf, MAXLINE);				if(n <= 0) {					close(fd);					Close(connfd);					goto loop;				}				write(fd,  buf, n);			}		}	}	return 0;}

⌨️ 快捷键说明

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