#include"manFile.h"
#include<windows.h>
static int flag=0;
void connectServer(Client myclient)
{
myclient.addSocket();
myclient.initSocket();
myclient.createSocket();
myclient.connectAsk();
}
void initData(managerFile &manFile)
{
manFile.dealSize=0;
manFile.everySize=0;
manFile.totalSize=0;
manFile.fp=new FILE;
}
long getFileLen(char *fileName)
{
FILE *fp;
char buf[MAXSIZE];
int everySize=0;
long totalSize=0;
memset(buf,0,1024);
//获取文件名
fp=fopen(fileName,"rb");
while(!feof(fp))
{
everySize=fread(buf,1,sizeof(buf),fp); //读入文件流
totalSize=totalSize+everySize;
}
fclose(fp);
return totalSize;
}
DWORD WINAPI sendFileProc(LPVOID lpParameter) //发文件
{
managerFile *curFile=(managerFile *)lpParameter;
while((curFile->everySize!=0)&&curFile->dealSize<curFile->totalSize)
{
WaitForSingleObject(curFile->hMutex,INFINITE);
curFile->myclient.sendInfo(curFile->buf);
memset(curFile->buf,0,1024);
curFile->dealSize+=curFile->everySize;
// curFile->everySize=0;
float size=(int)(curFile->dealSize*1.0/curFile->totalSize*100);
if(size-int(size)<=0.001)
{
cout<<"已上传:"<<int(size)<<"%"<<endl;
}
ReleaseMutex(curFile->hMutex);
}
return 0;
}
DWORD WINAPI readFileProc(LPVOID lpParameter) //读文件
{
managerFile *curFile=(managerFile *)lpParameter;
//发送数据之前,需要发送,1、文件名 2、文件的总长度
while(!feof(curFile->fp))
{
WaitForSingleObject(curFile->hMutex,INFINITE);
curFile->everySize=fread(curFile->buf,1,sizeof(curFile->buf),curFile->fp); //读入文件流
cout<<" ";
ReleaseMutex(curFile->hMutex);
}
return 0;
}
DWORD WINAPI recvFileProc(LPVOID lpParameter) //收文件
{
managerFile *curFile=(managerFile *)lpParameter;
curFile->totalSize=getFileLen(curFile->fileName);
itoa(curFile->totalSize,curFile->buf,10);
curFile->myclient.sendInfo(curFile->buf); //发送文件长度
while(curFile->dealSize<curFile->totalSize)
{
WaitForSingleObject(curFile->hMutex,INFINITE);
strcpy(curFile->buf,curFile->myclient.receiveInfo());
curFile->dealSize=curFile->dealSize+strlen(curFile->buf);
//cout<<"已下载"<<curFile->dealSize*1.0/curFile->totalSize*100<<"%"<<endl;
ReleaseMutex(curFile->hMutex);
}
//fclose(fp);
return 0;
}
DWORD WINAPI writeFileProc(LPVOID lpParameter) //写文件
{
managerFile *curFile=(managerFile *)lpParameter;
strcpy(curFile->fileName,"test.txt");
curFile->fp=fopen(curFile->fileName,"wb");
//curFile->totalSize=getFileLen(curFile->fileName);
//cout<<curFile->totalSize;
//cout<<"read";
while(curFile->dealSize<=curFile->totalSize)
{
WaitForSingleObject(curFile->hMutex,INFINITE);
curFile->everySize=fwrite(curFile->buf,1,sizeof(curFile->buf),curFile->fp); //写入文件流
memset(curFile->buf,0,MAXSIZE);
curFile->totalSize+=curFile->everySize;
//cout<<"写消息"<<endl;
ReleaseMutex(curFile->hMutex);
}
fclose( curFile->fp);
return 0;
}
void downFile(managerFile &myfile) //下载文件
{
//发送文件名及文件总长度以及后缀
//totalSize=
while(myfile.dealSize<myfile.totalSize)
{
//myserver.initBuf();
strcpy(myfile.buf,myfile.myclient.receiveInfo());
myfile.everySize=fwrite(myfile.buf,1,sizeof(myfile.buf),myfile.fp); //读入文件流
myfile.dealSize=myfile.dealSize+myfile.everySize;
memset(myfile.buf,0,1024);
float size=(int)(myfile.dealSize*1.0/myfile.totalSize*100);
if(size-int(size)<=0.001)
{
cout<<"已下载:"<<int(size)<<"%"<<endl;
}
}
fclose(myfile.fp);
}