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

📄 server.cpp

📁 安全文件传输
💻 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 + -