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