文件传输WriteFile出错
服务器端:
客户端代码:
上述代码是我从我的一个文件传送的小程序中摘录的一部分,其中在客户端将接收到的信息写入到文件时经常有错误发生。
当我发送一个几KB的文件时可以顺利的传完,但发送超过1M左右的文件时就会提示“文件写入失败”,也就是在客户端的WriteFile函数返回FALSE。但奇怪的是当我用相同文件进行单步调试时有不会有出错提示。有哪位高手能不能看看代码看看有什么不完善的地方,请指正!谢谢
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);
上述代码是我从我的一个文件传送的小程序中摘录的一部分,其中在客户端将接收到的信息写入到文件时经常有错误发生。
当我发送一个几KB的文件时可以顺利的传完,但发送超过1M左右的文件时就会提示“文件写入失败”,也就是在客户端的WriteFile函数返回FALSE。但奇怪的是当我用相同文件进行单步调试时有不会有出错提示。有哪位高手能不能看看代码看看有什么不完善的地方,请指正!谢谢
...全文
相关推荐
SuperCopy.zip
可以把指定的文件/文档/压缩包或文件夹,批量复制到指定的多个文件夹里
win32格式的zip/unzip
win32环境下的zip/unzip,可以帮助你理解压缩解压的过程,进行学习与比较。
nodejs对字符串进行编辑并生成文件
nodejs对字符串进行编辑并生成文件
详解nodejs 文本操作模块-fs模块(三)
本篇文章主要介绍了nodejs 文本操作模块-fs模块(三),详细的讲诉了readFile,和writeFile方法,具有一定的参考价值,有兴趣的可以了解一下。
利用node.js实现自动生成前端项目组件的方法详解
最近在学习用,基于nodejs的强大,我从原本的只写前端变成了写全栈。下面这篇文章主要给大家介绍了关于利用node.js实现自动生成前端项目组件的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面来一起看看吧。


网络编程
