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

📄 cliprog.c

📁 用C语言编的邮件系统(毕业论文)
💻 C
字号:
#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<ctype.h>    /* function atoi() */#include<string.h>#include<netdb.h>#include<unistd.h>   /*function char* getpass(const char*)   */#include<sys/types.h>#include<netinet/in.h>#include<sys/socket.h>#define MAXSIZE 500#define OK 1typedef struct{           int mailnum;           char to[MAXSIZE];           char from[MAXSIZE];           char subject[MAXSIZE];           char content[MAXSIZE];}MailStruct;/*   Signals meaning:    B:Begin,D:Done,T:True,F:False*/int ConnectToServer(char *,char*);int ClientMain(int);char InterfaceA();int SendSockChar(int ,char);char GetSockChar(int);int sockendline();void  CutEndl(char* str);int readline (int,void *,int);void InputUsrPswdR(char*,char*);void InputUsrPswdL(char*,char*);int SendUsrPswd(int ,char* ,char*);int RegisterCli(int );int MailClient(int );int ReadMailCli(int);int DelMailCli(int);int SendMailCli(int);int main(int argc,char **argv){    int sockfd;    if (argc!=3) {        fprintf(stderr,"usage:./cliprog<server's ip address><server'sport>\n");                 exit(1);    }        sockfd=ConnectToServer(argv[1],argv[2]);        ClientMain(sockfd);        close(sockfd);    printf("......local socket closed\n");    return 0;}  int ConnectToServer(char* IpAddr,char* SevPort)   /*ok*/ {     int sockfd;     struct sockaddr_in servaddr;     sockfd=socket(AF_INET,SOCK_STREAM,0);     bzero(&servaddr,sizeof(struct sockaddr_in));     servaddr.sin_family=AF_INET;     servaddr.sin_port=htons(atoi(SevPort));     inet_aton(IpAddr,&servaddr.sin_addr);     connect(sockfd,(struct sockaddr*)&servaddr,sizeof(struct sockaddr));     return sockfd;}int ClientMain(int sockfd)    /*ok*/{    char Comch,Infch;    char recvbuf[MAXSIZE],sendbuf[MAXSIZE];    Comch=InterfaceA();    SendSockChar(sockfd,Comch);    switch (Comch){        case 'R':                RegisterCli(sockfd);                 break;        case 'L':                 LoginCli(sockfd);                  break;    }}int SendSockChar(int sockfd,char ch)    /*ok*//*send a signal char or a  command char to server through socket*/{    return write(sockfd,&ch,1);}char GetSockChar(int sockfd)      /*ok*//*get a command char  or a signal char from socket*/{    char ch;    while ( (read(sockfd,&ch,1))==0);    return ch;} char InterfaceA()     /*ok*/{    char ch;    printf("\n\nWelcome to DTMail system!\n");    printf("Version 1.0,  Written by Tang Wei & Tang Zhijun\n");    printf("Supervisor: Shen Mingyu\n");    printf("June 9,2002\n");    printf("\nPlease input your choice:R or L?\n");             printf("[R]egesiter\n");         printf("[L]ogin\n");      do {             ch=getchar();             ch=toupper(ch);              if (ch!='R'&&ch!='L')                  printf("No such choice,please enter again,R or L:");    }while(ch!='R'&&ch!='L');    return ch;}int RegisterCli(int sockfd)    /*ok*/{    char ch;    char Username[MAXSIZE],Password[MAXSIZE];    InputUsrPswdR(Username,Password);    SendUsrPswd(sockfd,Username,Password);    if ((ch=GetSockChar(sockfd))=='D')           printf("Register Successfully!\n");    return OK;}int LoginCli(int sockfd){    char ret;    char Username[MAXSIZE],Password[MAXSIZE];    do {        InputUsrPswdL(Username,Password);        SendUsrPswd(sockfd,Username,Password);        while(read(sockfd,&ret,1)==0);        if  (ret=='T')            MailClient(sockfd);        else            printf("Password wrong,please input again\n");    }while (ret=='F');    return OK;}void InputUsrPswdL(char *Usr,char*Pswd)   /*ok*/{    char *ptr;    puts("please input username:");    scanf("%s",Usr);    ptr = getpass("please input password:");    strcpy(Pswd,ptr);}void InputUsrPswdR(char *Usr,char*Pswd)    /*ok*/{        char passwd[20] ;    char *ptr1,*ptr2;    int ret;     printf("username?");    scanf("%s",Usr);    do {        ptr1= getpass("Input password : ");        strcpy(Pswd,ptr1);        ptr2 = getpass("Retype password : ");        if  ((ret=strcmp(ptr2,Pswd))==0)             printf("password accepted!\n");        else             printf("two passwords do not match,input again\n");     }while(ret!=0);}int SendUsrPswd(int sockfd,char* Usr,char* Pswd)  /*ok*/{    int usrlen,pswlen;    int ret1,ret2;    usrlen=strlen(Usr);    SendSockChar(sockfd,'B');    pswlen=strlen(Pswd);    ret1=write(sockfd,Usr,usrlen);    sockendline(sockfd);    ret2=write(sockfd,Pswd,pswlen);    sockendline(sockfd);    if (ret1==usrlen && ret2==pswlen)         return 0;    else return  -1;}int MailClient(int sockfd){    char ch;    printf("Login Successfully!\n");       RecvMailList(sockfd);        printf("\nPlease input your choice:\n");    for(; ;){              printf("[R]ead mail\n");             printf("[D]elet mail\n");             printf("[S]end mail\n");             printf("[E]xit\n");             do{                  ch=getchar();             }while (!isalpha(ch));            ch=toupper(ch);            SendSockChar(sockfd,ch);            printf("input command:%c\n",ch);            switch(ch){                  case 'R':ReadMailCli(sockfd);                               break;                  case 'D':DelMailCli(sockfd);                                break;                  case 'S': SendMailCli(sockfd);                              break;                  case'E': printf("exit the mail system,byebye!");                            return OK;                  default:printf("No such command,input again!\n");                           break;             }             printf("\nAnother sevice?Please input your choice:\n");       }       printf("\nsevice completed,bye!\n");      return OK;}int RecvMailList(int sockfd){    int i;    char ch,buf[MAXSIZE];    ch=GetSockChar(sockfd);    i=0;    while(ch!=0) {        buf[i++]=ch;        read(sockfd,&ch,1);     }     buf[i]=0;        printf("%s\n",buf);}        int sockendline(int sockfd)   /*ok*/{    const char ch='\n';    if (write(sockfd,&ch,1)==1)         return 0;    else -1;} void  CutEndl(char* str){    int len;    len=strlen(str);    if (str[len-1]=='\n')                 str[len-1]='\0';}int             /* read a text line from a descriptor */readline (int fd,void *vptr,int maxlen){    int n,rc;    char c,*ptr;        ptr = vptr;    for (n=1;n<maxlen;n++) {      again:        if ( (rc =read(fd,&c,1)) ==1) {            *ptr++=c;            if (c=='\n')                break;         /* newline is stored,like fgets() */        }else if (rc ==0) {            if (n==1)                return (0);   /* EOF,no data read */            else               break;       }else{            if (errno == EINTR)                goto again;            return(-1);     /* error,errno set by read() */       }    }    *ptr=0;                /* null terminate like fgets() */    return(n);} int ReadMailCli(int sockfd){    char buf[MAXSIZE],MailNum[4],ch;    int i;    printf("\nwhich mail do you want to read?type number:");    scanf("%s",MailNum);    SendSockChar(sockfd,'B');    write(sockfd,MailNum,4);     sockendline(sockfd);        ch=GetSockChar(sockfd);        readline(sockfd,buf,MAXSIZE);    CutEndl(buf);    printf("From: %s\n",buf);        readline(sockfd,buf,MAXSIZE);    CutEndl(buf);    printf("To: %s\n",buf);      readline(sockfd,buf,MAXSIZE);    CutEndl(buf);    printf("Subject: %s\n",buf);        read(sockfd,&ch,1);    i=0;    while(ch!=0) {         buf[i++]=ch;         read(sockfd,&ch,1);     }     buf[i]='\0';         printf("content:\n%s\n",buf);    printf("[end]");    SendSockChar(sockfd,'D');    return OK;}int DelMailCli(int sockfd){    char ch,MailNum[4];    printf("\nwhich mail do you want to delete?type number:");    scanf("%s",MailNum);    SendSockChar(sockfd,'B');    write(sockfd,MailNum,4);    sockendline(sockfd);    ch=GetSockChar(sockfd);    if (ch=='D') {        printf("The mail deleted successfully!");         SendSockChar(sockfd,'D');        return OK;    }else return -1;}int SendMailCli(int sockfd){    FILE *stream;     char ch,buf[MAXSIZE];    int i,buflen;        SendSockChar(sockfd,'B');    printf("send mail to:");       scanf("%s",buf);    buflen=strlen(buf);   write(sockfd,buf,buflen);     sockendline(sockfd);       printf("subject:");    i=0;    do{         ch=getchar();    }while(!isprint(ch));   do{         buf[i++]=ch;    }while( (ch=getchar())!='\n');      buf[i]=0;    buflen=strlen(buf);    write(sockfd,buf,buflen);      sockendline(sockfd);       printf("input mail text:\n");    i=0;    while((ch = getchar())!=EOF)        buf[i++]=ch;    buf[i]=0;    buflen=strlen(buf);               printf("\nedit comleted mail text length:%d\n",buflen);    write(sockfd,buf,buflen);    ch='\0';    SendSockChar(sockfd,ch);    sockendline(sockfd);    ch=GetSockChar(sockfd);    if (ch=='D') {         SendSockChar(sockfd,ch);        printf("the mail is sent successfully!\n");        return OK;    }    else return -1;}

⌨️ 快捷键说明

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