Ftp客户端程序
来源:互联网 发布:ipod怎么删除歌曲mac 编辑:程序博客网 时间:2024/04/28 16:18
/*============================================================================ Name : FtpClient.cbp Author : Haier Version : 1.01 Copyright : Copyright (c) 2014 Description : Ftp Client in C, Ansi-style, Compile by Gcc,in Linux ============================================================================*/#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <stdio.h>#include <unistd.h>#include <string.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>#define TRUE (1)#define BUFFER (1024)char UserCmd[10],CmdArg[20];void pwd(int Sock,int SockMsg);void dir(int Sock,int SockMsg);void cd(int Sock,int SockMsg,char *DirName);void cdback(int Sock,int SockMsg);void quit(int Sock,int SockMsg);void help(int Sock,int SockMsg);void get(int Sock,int SockMsg,char *FileName);void put(int Sock,int SockMsg,char *FileName);int main(int argc,char *argv[]){ int Sock,SockMsg; struct hostent *Host; argv[1]="test02"; argv[2]="5500"; struct sockaddr_in Server,ServerMsg; Sock =socket(AF_INET,SOCK_STREAM,0); SockMsg=socket(AF_INET,SOCK_STREAM,0); if(Sock<0 || SockMsg<0) { perror("Socket Failed !\n"); exit(1); } Host=gethostbyname(argv[1]); if(Host==0) { fprintf(stderr,"%s:Unknown host !\n",argv[1]); exit(1); } Server.sin_family=AF_INET; Server.sin_port =htons(atoi(argv[2])); memcpy((char*)&Server.sin_addr,(char*)Host->h_addr,Host->h_length); ServerMsg.sin_family=AF_INET; ServerMsg.sin_port =htons(atoi(argv[2])+1); memcpy((char*)&ServerMsg.sin_addr,(char*)Host->h_addr,Host->h_length); if(connect(Sock,(struct sockaddr *)&Server,sizeof(Server))) { perror("1:Connect Failed !\n"); exit(1); } if(connect(SockMsg,(struct sockaddr *)&ServerMsg,sizeof(ServerMsg))) { perror("2:Connect Failed !\n"); exit(1); } while(TRUE) { memset(UserCmd,0,sizeof(UserCmd)); memset(CmdArg,0,sizeof(CmdArg)); printf("ftp>"); scanf("%s",UserCmd); if(strcmp(UserCmd,"quit")==0) { quit(Sock,SockMsg); close(Sock); close(SockMsg); exit(0); } else if(strcmp(UserCmd,"?")==0) { help(Sock,SockMsg); } else if(strcmp(UserCmd,"pwd")==0) { pwd(Sock,SockMsg); } else if(strcmp(UserCmd,"dir")==0) { dir(Sock,SockMsg); } else if(strcmp(UserCmd,"cd")==0) { scanf("%s",CmdArg); cd(Sock,SockMsg,CmdArg); } else if(strcmp(UserCmd,"cd..")==0) { cdback(Sock,SockMsg); } else if(strcmp(UserCmd,"get")==0) { scanf("%s",CmdArg); get(Sock,SockMsg,CmdArg); } else if(strcmp(UserCmd,"put")==0) { scanf("%s",CmdArg); put(Sock,SockMsg,CmdArg); } else { printf("Unknown Command !\n"); } }}void pwd(int Sock,int SockMsg){ char DirName[30]; write(SockMsg,UserCmd,sizeof(UserCmd)); read(Sock,DirName,sizeof(DirName)); printf("%s",DirName);}void dir(int Sock,int SockMsg){ int i,FileCount; char FileInfo[50]; write(SockMsg,UserCmd,sizeof(UserCmd)); read(Sock,&FileCount,sizeof(FileCount)); if(FileCount>0) { printf("FileCount: %d\n",FileCount); for(i=0; i<FileCount; i++) { memset(FileInfo,0,sizeof(FileInfo)); read(Sock,FileInfo,sizeof(FileInfo)); printf("%s\n",FileInfo); } } else if(FileCount==0) { printf("Empty !\n"); return ; } else { printf("Error in dir !\n"); return ; }}void cd(int Sock,int SockMsg,char *DirName){ char CurrentDirPath[100]; write(SockMsg,UserCmd,sizeof(UserCmd)); write(SockMsg,CmdArg,sizeof(CmdArg)); read(Sock,CurrentDirPath,sizeof(CurrentDirPath)); printf("%s\n",CurrentDirPath);}void cdback(int Sock,int SockMsg){ write(SockMsg,UserCmd,sizeof(UserCmd));}void quit(int Sock,int SockMsg){ write(SockMsg,UserCmd,sizeof(UserCmd));}void help(int Sock,int SockMsg){ char helpBuf[200]; write(SockMsg,UserCmd,sizeof(UserCmd)); read(Sock,helpBuf,sizeof(helpBuf)); printf("%s\n",helpBuf);}void get(int Sock,int SockMsg,char *FileName){ char LocalFilePath[100]; int fd; char Buffer[BUFFER]; long FileSize; write(SockMsg,UserCmd,sizeof(UserCmd)); write(SockMsg,CmdArg,sizeof(CmdArg)); printf("%s,%s\n",UserCmd,CmdArg); memset(LocalFilePath,0,sizeof(LocalFilePath)); getcwd(LocalFilePath,sizeof(LocalFilePath)); strcat(LocalFilePath,"/"); strcat(LocalFilePath,FileName); fd=open(LocalFilePath,O_RDWR|O_CREAT,S_IREAD|S_IWRITE); if(fd>0) { memset(Buffer,0,BUFFER); read(Sock,&FileSize,sizeof(long)); while(FileSize>BUFFER) { read(Sock,Buffer,BUFFER); write(fd,Buffer,BUFFER); FileSize-=BUFFER; } read(Sock,Buffer,FileSize); write(fd,Buffer,FileSize); close(fd); printf("Finished !\n"); } else { printf("Open File Failed !\n"); }}void put(int Sock,int SockMsg,char *FileName){ char LocalFilePath[100]; int fd; char Buffer[BUFFER]; struct stat FileStat; long FileSize; write(SockMsg,UserCmd,sizeof(UserCmd)); write(SockMsg,CmdArg,sizeof(CmdArg)); memset(LocalFilePath,0,sizeof(LocalFilePath)); getcwd(LocalFilePath,sizeof(LocalFilePath)); strcat(LocalFilePath,"/"); strcat(LocalFilePath,FileName); fd=open(LocalFilePath,O_RDONLY,S_IREAD); if(fd>0) { fstat(fd,&FileStat); FileSize=FileStat.st_size; write(Sock,&FileSize,sizeof(FileSize)); memset(Buffer,0,BUFFER); while(FileSize>BUFFER) { read(fd,Buffer,BUFFER); write(Sock,Buffer,BUFFER); FileSize-=BUFFER; } read(fd,Buffer,FileSize); write(Sock,Buffer,FileSize); close(fd); printf("Finished !\n"); } else { printf("Create %s Failed !\n"); }}
0 0
- ftp客户端程序
- FTP客户端程序
- FTP客户端程序源码
- Ftp客户端程序
- FTP 客户端程序
- ftp客户端更新程序
- MFC写FTP客户端程序
- MFC实现FTP客户端程序
- 用Perl写的FTP客户端程序
- 用python编写ftp客户端程序
- 第一个 Erlang 程序: Ftp 下载客户端
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- ftplib模块--编写ftp客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 安装配置MongoDB
- [LeetCode]—Valid Palindrome 回文判断
- 模糊测试 学习
- ATL/COM----IDL和MIDL之详解 .
- IOS中的UIScrollView简单应用(转)
- Ftp客户端程序
- 使用JWplayer出现Video not found or access denied的问题
- POJ-3371-Flesch Reading Ease一道模拟题
- 集电极开路、漏极开路、上拉电阻、下拉电阻等接口相关基本概念
- 【大话QT之十二】基于CTK Plugin Framework的插件版本动态升级
- matlab生成VS可调用的dll文件
- 我的几个linux相关软件的配置文件 vim,emacs,emacs-org-module,git。shell
- 数据结构栈之中缀表达式转后缀
- Python——strip()函数,title()函数