18,356
社区成员
发帖
与我相关
我的任务
分享
typedef struct _MsgFormat
{
int type; //信息类型
char msg[2048]; //信息内容
long length;//信息长度
}MsgFormat;
//发送文件
DWORD dwRead;
BOOL bOk;
MsgForamt recvMsg;
HANDLE hFile=CreateFile(strFileName,GENERIC_READ,0,0,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,0); //创建文件句柄
while(1)
{
dwRead=0;
memset(recvMsg.msg,0,2048);
bOk=ReadFile(hFile,recvMsg.msg,2048,&dwRead,NULL);//读取文件
if(bOk==FALSE)
{
dlg->PendLog("读取文件出错!");
break;
}
else if(dwRead==0)
{
recvMsg.type=9; //读取文件完成标志
int nSend=::send(socket,(char*)&recvMsg,sizeof(recvMsg),0);//发送文件传送完成标志
if(nSend>0)
{
PendLog("用户 "+strUserName+"发送文件"+strFileName1+"完毕");
}
else
{
MessageBox(_T("发送完毕信息失败"),_T("失败"),MB_OK|MB_ICONERROR);
}
break;
}
else
{
recvMsg.type=2; //发送信息标志
recvMsg.length=dwRead;
int nSend=::send(pSocketClient->s,(char*)&recvMsg,sizeof(recvMsg),0);//发送文件信息
if(nSend<=0)
{
break;
}
}
}
CloseHandle(hFile);//关闭文件句柄
typedefstruct_MsgFormat
{
inttype;//信息类型
charmsg[2048];//信息内容
longlength;//信息长度
}MsgFormat;
DWORDdwWrite;
boolbOk;
MsgFormat recvMsg;
//创建文件句柄 strFileName为文件名
HANDLE hFile=CreateFile(strFileFullName,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
while(1)
{
memset(recvMsg.msg,0,2048);
int read=::recv(socket,(char*)&recvMsg,sizeof(recvMsg),0); //读取服务器端发送的文件
if(read<=0)
break;
if(recvMsg.type==9)//如果发送的为完成标志则退出
break;
int length=0;
length=recvMsg.length;//服务器端发送信息的长度
bOk=WriteFile(hFile,recvMsg.msg,length,&dwWrite,NULL);//将信息写入到文件中
if(bOk==FALSE)
{
MessageBox(_T("文件写入失败!"),_T("文件下载失败"),MB_OK|MB_ICONERROR);
break;
}
if(dwWrite==0)
break;
}
AfxMessageBox(_T("文件下载完成"));
CloseHandle(hFile);