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