MFC 程序 客户端发送文件到服务端 MD5改变 局域网 或本机检测上传文件 MD5 值一致 外网就不一致了 TCP传输的啊 不会丢包啊 有过类似情况的支支招急等 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 cfile.Open(strDat,CFile::modeWrite|CFile::typeBinary|CFile::modeCreate,NULL); //zhuyi if (nSize<nRecvOneTime)//排除第一次接收到小于最小包的情况 { nRecv=recv(socket,pFileData,nSize,0); file.Write(pFileData,nSize); /*nnTotalRecv=nTotalRecv; nnSize=nSize;*/ } else { while (true) { if(nRecv+nTotalRecv<=nSize) { nRecv=recv(socket,pFileData,nRecvOneTime,0); file.Write(pFileData,nRecv); nTotalRecv+=nRecv; } else { nRecv=recv(socket,pFileData,nSize-nTotalRecv,0); file.Write(pFileData,nSize-nTotalRecv); nTotalRecv+=nRecv; } i=nTotalRecv; j=nSize; cfile.Seek(0,CFile::begin); int dd=nTotalRecv+nSeek; cfile.Write(&dd,sizeof(int)); if(nTotalRecv==nSize) { break; } } } delete []pFileData; file.Close(); cfile.Close(); if (DeleteFile(strDat)!=0) { AfxMessageBox(_T("文件下载完成!")); } return 0; } 发送结束后,不从容关闭的话,外网网络环境不是很好,直接closesocket可能导致最后一点点数据被丢弃,导致文件不一致,建议发送结束后,先shutdown从容关闭,然后再closesocket释放连接 我以前做个一个程序,局域网没问题但外网有问题原因好像是网络数据包最大只能存储10个,超过10个就会丢包比如说服务器是A,客户端是B局域网:A处代码1ms发送一个包,B处代码 1ms处理一个包,很稳定,不会丢包外网:A处代码执行时间1ms 发送1个包,但因为阻塞,10ms后b处还未接到数据,那么A处继续发包就会丢失解决办法,B收到包后通知A,A继续发 ListCtr控件的扩展类如何向主窗体发送消息? MFC怎样将客户区内容以图片格式写入到剪贴板 问个gprs上网问题 十一连环问(都是初学者问题,辛苦了) 文档/视图模式问题! 如何每隔一秒显示一幅图画 vs2010开发的MFC应用程序是否能在windows的pad上运行 很菜的问题:在vc 中的延时的函数是哪个?哪个类的多帮帮忙?(菜鸟在这儿先谢谢大家了) 侯捷先生的2001年大陆图书(简体中文版)出版计划 非常着急! DirectX编程.已经贴了好几遍了,难道真没人会吗? 得到HTMLView的源文件,如何做修改 ,然后再显示出来? 自绘窗口上添加ComboBox控件
if (nSize<nRecvOneTime)//排除第一次接收到小于最小包的情况
{ nRecv=recv(socket,pFileData,nSize,0);
file.Write(pFileData,nSize);
/*nnTotalRecv=nTotalRecv;
nnSize=nSize;*/
}
else
{ while (true)
{ if(nRecv+nTotalRecv<=nSize)
{
nRecv=recv(socket,pFileData,nRecvOneTime,0);
file.Write(pFileData,nRecv);
nTotalRecv+=nRecv;
}
else
{
nRecv=recv(socket,pFileData,nSize-nTotalRecv,0);
file.Write(pFileData,nSize-nTotalRecv);
nTotalRecv+=nRecv; }
i=nTotalRecv;
j=nSize;
cfile.Seek(0,CFile::begin);
int dd=nTotalRecv+nSeek;
cfile.Write(&dd,sizeof(int));
if(nTotalRecv==nSize)
{
break;
}
}
} delete []pFileData;
file.Close();
cfile.Close();
if (DeleteFile(strDat)!=0)
{
AfxMessageBox(_T("文件下载完成!"));
}
return 0;
}
原因好像是网络数据包最大只能存储10个,超过10个就会丢包
比如说服务器是A,客户端是B
局域网:A处代码1ms发送一个包,B处代码 1ms处理一个包,很稳定,不会丢包
外网:A处代码执行时间1ms 发送1个包,但因为阻塞,10ms后b处还未接到数据,那么A处继续发包就会丢失
解决办法,B收到包后通知A,A继续发