📄 ftpserver.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 + -