📄 server.cpp
字号:
#include "server.h"#include <unistd.h>#include <stdlib.h>#include <pthread.h>typedef struct getSSL{ SSL* ssl; int client;}getSSL;server::server(){ int n = 5; pthread_t id;// while(n--) while(1) { // pthread_t id[5]; int client = net.isAccept(); SSL* ssl =net.sslAccept();/* if(n == 0) { net.Write("full connected"); close(client); SSL_shutdown(ssl); free(ssl); } else net.Write("connect"); */ getSSL tempVar; tempVar.ssl =ssl; tempVar.client = client; pthread_create(&id,NULL,dopthread,(void*)&tempVar); }}void* dopthread(void *argc){ getSSL *tempSSL =(getSSL*)argc; server tempServer(tempSSL->ssl,tempSSL->client); int cmd; char buf[20]; char temp[20]; memset(buf,0,20); memset(temp,0,20); unsigned int fileSize; while(1) { if(tempServer.net.Read(cmd,buf,temp,&fileSize) <= 0) { cout << "disconnect client" << endl; break; } switch(cmd) { case 1: { bool check = tempServer.manage.userManagement(cmd,buf,temp); if(check) { tempServer.userLogin(); } else tempServer.net.Write("errno"); } break; case 2: { bool check = tempServer.manage.userManagement(cmd,buf,temp); if(check) { tempServer.userRegister(); } else tempServer.net.Write("errno"); } break; case 3: { bool check = tempServer.manage.fileManagement(cmd,buf,temp,fileSize); if(check) { tempServer.upLoadFile(buf,fileSize); } else tempServer.net.Write("errno"); } break; case 4: { bool check = tempServer.manage.fileManagement(cmd,buf); if(check) { tempServer.downLoadFile(buf); } else tempServer.net.Write("errno"); } break; default: tempServer.net.Write("errno"); break; } } }void server::userLogin(){ net.Write("OK"); fileMetadata file("fileDB.db"); char** fileResult = NULL; int nrow =0,ncolumn =0; fileResult=file.getAllMetadata(nrow,ncolumn); for(int i =3;i<(nrow+1)*ncolumn;i+=3) { unsigned int fileSize =atoi(fileResult[i+2]); net.Write(fileResult[i],fileResult[i+1],fileSize); } net.Write("0","0",0);}void server::userRegister(){ net.Write("OK");}void server::upLoadFile(char* pathname,unsigned int filesize){ net.Write("OK"); unsigned int len =0; unsigned int fileTotolSize =0; unsigned int dataSize = 0; char dataBuf[DATAMAXBUF]; int status; ofstream outfile(pathname); while(1) { memset(dataBuf,0,DATAMAXBUF); net.dataRead(status,dataBuf,dataSize); if( status == 1) { fileTotolSize = dataSize; } else if(status == 2) { outfile << dataBuf; cout << dataBuf << endl; len += dataSize; } else if(status == 3) { outfile.close(); break; } } }void server::downLoadFile(char* pathname){ net.Write("OK");// net.dataWrite(0,pathname); char dataBuf[DATAMAXBUF]; ifstream infile(pathname); unsigned int dataLen; net.dataWrite(1,pathname); while(1) { memset(dataBuf,0,DATAMAXBUF); infile.getline(dataBuf,DATAMAXBUF-1); dataLen =strlen(dataBuf); dataBuf[dataLen] = '\n'; dataBuf[dataLen+1] ='\0'; if(!infile.eof()) { net.dataWrite(2,dataBuf,dataLen+1); cout << dataBuf; } else { net.dataWrite(3,dataBuf,dataLen); infile.close(); break; }// sleep(1); } return ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -