📄 client.c
字号:
#include "clienthead.h"#include "clientfunc.h"void creatconnect(const char *hostname){ struct hostent *host; struct sockaddr_in serv_addr; /*to openssl init*/ SSL_library_init(); OpenSSL_add_all_algorithms(); SSL_load_error_strings(); ctx=SSL_CTX_new(SSLv23_client_method()); if(ctx==NULL) { ERR_print_errors_fp(stdout); exit(1); } if((host=gethostbyname(hostname))==NULL) { perror("gethostbyname error!"); exit(1); } if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket error!"); exit(1); } serv_addr.sin_family=AF_INET; serv_addr.sin_port=htons(SERVPORT); serv_addr.sin_addr=*((struct in_addr *)host->h_addr); bzero(&(serv_addr.sin_zero),8); if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1) { perror("connet eroor!"); exit(1); } printf("rewrrew\n"); /*new one SSL */ ssl=SSL_new(ctx); SSL_set_fd(ssl,sockfd); /*SSL connect */ if(SSL_connect(ssl)==-1) { ERR_print_errors_fp(stderr); } else { printf("connect with '%s' encruption\n",SSL_get_cipher(ssl)); ShowCerts(ssl); } }/***********send**********/void sendpackage(void){ int len; len=(SSL_write(ssl,p,sizeof(struct proself))); memset(buffer,0,MAXBUF);}/**********recive********/void recivepackage(void){ int len; len=(SSL_read(ssl,buffer,MAXBUF)); printf("buffer:%s\n",buffer);}void downfiledata(FILE *fp){ int len,i=0,datalen; while(1) { int fwlen; memset(d,0,sizeof(struct downfilepackage)); len=SSL_read(ssl,d,sizeof(struct downfilepackage)); datalen=d->buflen; memmove(buffer,d->data,datalen); fwlen = fwrite(buffer,sizeof(char),datalen,fp); i++; if(i == 1) printf("packNum:%d\n",d->baoshu); if(i==d->baoshu) break; } memset(buffer,0,MAXBUF);}/**********register********/int callregister(const char *name,const char *password){ memset(p,0,sizeof(struct proself)); strcpy(p->Package.UserInfo.uname,name); strcpy(p->Package.UserInfo.upswd,password); p->cmd=7; p->num=1; sendpackage(); recivepackage(); return strcmp(buffer,"ok"); }/**********login**********/int login(const char *name,const char *password){ memset(p,0,sizeof(struct proself)); strcpy(p->Package.UserInfo.uname,name); strcpy(p->Package.UserInfo.upswd,password); p->cmd=1; p->num=1; sendpackage(); recivepackage(); int isok = strcmp("ok",buffer);//验证成功返回0 memset(buffer,0,MAXBUF); memset(p,0,sizeof(struct proself)); if(isok) isok = 1; return isok; }/**********delete*********/void deletefile(const char *name){ strcpy(p->Package.DelInfo.delname,name); p->cmd=2; p->num=1; sendpackage(); recivepackage();}/**********rename********/void renamefile(const char *newname,const char *oldname){ strcpy(p->Package.ReInfo.rename,newname); strcpy(p->Package.ReInfo.formername,oldname); p->cmd=3; p->num=1; sendpackage(); recivepackage();} /********downfile********/void downfile(const char *name,const char *fileSavePath){ int len; FILE *fp; char realname[30]; strcpy(p->Package.DownInfo.dfile,name); p->cmd=4; p->num=1; sendpackage(); sprintf(realname,"%s/%s",fileSavePath,name); fp = fopen(realname,"wb"); printf("*******Start download %s*******\n",name); downfiledata(fp); printf("*******end download %s*******\n",name); fclose(fp);}/**********upfile**********/void upfile(const char *filename, const char *filepath,int upStat){ FILE *fp; int baoshu=0; unsigned int filelen; int rc; time_t now; memset(p,0,sizeof(struct proself)); strcpy(p->Package.UpInfo.fname,filename); printf("*******Upload file:%s*******\n",filename); struct stat filebuf; stat(filepath,&filebuf); filelen=filebuf.st_size; p->cmd=5; p->num=1; p->Package.UpInfo.upstat=upStat; p->Package.UpInfo.fsize=filelen; baoshu=filelen/MAXBUF; if(filelen%MAXBUF!=0) baoshu+=1; p->num=baoshu; printf("packNum:%d\n",p->num); time(&now); struct tm *tmp = localtime(&now); sprintf(p->Package.UpInfo.fdate,"0%d-%d-%d",tmp->tm_year%100,tmp->tm_mon,tmp->tm_mday); fp = fopen(filepath,"rb"); while((rc = fread(buffer,sizeof(char),MAXBUF,fp))!= 0) { p->Package.UpInfo.rc=rc; memmove(p->Package.UpInfo.data,buffer,rc); sendpackage(); memset(buffer, 0 , MAXBUF); } recivepackage(); printf("*******Upload file end:%s*******\n",filename); fclose(fp);}/*********listReload*******/void listReload(){ p->cmd = 6; p->num = 1; sendpackage(); int afd,wlen; afd = open("liststring.dat",O_CREAT | O_WRONLY,777); printf("*******reload list*******\n"); while(1) { recivepackage(); if (strlen(buffer) == 0) break; write(afd,buffer,strlen(buffer)); if (strlen(buffer) < MAXBUF) { memset(buffer,0,MAXBUF); break; } memset(buffer,0,MAXBUF); } }/***********close********/void closeconnect(void){ close (sockfd); SSL_shutdown(ssl); SSL_free(ssl); SSL_CTX_free(ctx);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -